• Стоит ли хранить зашифрованные данные пользователя в Local/Session Storage на клиенте?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Стоит ли так делать и почему;

    Нет. Проверка прав должна выполняться на сервере и не зависеть от внешних систем, к которым нет доверия (это я про фронт). Фактически вы контроль доступа хотите передать другой стороне.

    2. Какой будет прирост производительности

    Прирост то будет, но меньше, чем вы надеетесь. Но не делайте так, еще раз.

    3. Как Вы решаете подобные вопросы.

    Один раз разобрался с https://symfony.com/doc/current/security.html и пользуюсь.
    Ответ написан
    Комментировать
  • На сколько может быть долгим запрос?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Может лучше ввести понятие общих feature_values? А для конкретной заправки, если надо - добавлять запись с кастомными данными, либо флагом удаления.
    Ответ написан
  • Проект под NodeJS для изучения возможностей платформы?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Напишите свой http фреймворк поверх expressjs, сейчас это модно. Еще круче - заюзать вместо Postgresql - монгу. Самый топчик - еще GraphQL прикрутить.
    Ответ написан
    4 комментария
  • Как правильно сохранить дерево в MongoDB?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Каждый элемент дерева - отдельный документ в коллекции с ссылкой на родителя.
    Ответ написан
  • Как уже на собеседовании понять, какое в компании качество кода?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Даже, если вы спросите: а дайте ка взглянуть на ваш код - вы же понимаете, что получите красивый участок.

    Можете задать такой вопрос. Программистов можно условно разделить на три категории по тому, что им нравится:
    * Исполнитель - его радует результат, максимально быстро и чтоб работало.
    * Гик - ему интересно попробовать всякие моднявые штуки, только вышла новая либа - он хочет ее заюзать.
    * Головолом - ему интересны сложные крупные задачи, там где надо посидеть, по медитировать.
    Собсно вопрос: какого человека по этим категориям вы ищите?
    Чаще всего идет микс из двух, если говорят все три важны одинаково - интервьюеру глубоко фиолетово. Если при этом интервьюером является технический специалист - это очень плохой знак.
    Так же можете спросить, кто по этой шкале есть в команде. Если команда состоит из одного типа программистов - это очень плохо.

    Что касается качества кода: спросите про используемые соглашения, критерии на код ревью и покрытость тестами
    Ответ написан
  • Можно ли обойтись без PHP на бэкэнде используя лишь JavaScript (+node.js)?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Слона едят частями. Для начала разберитесь с версткой, без less/stylus/pug/... потом беритесь за js, потом либо за один из фронт фрймворков и уже потом за средства сборки. До бэка вы можете не дойти так как фронт будет интересен.
    Ответ написан
    Комментировать
  • Как получить из static наследника к protected и public переменным?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Не используйте статику и подобных проблем у вас не будет.
    Ответ написан
    Комментировать
  • Как правильно оценивать разработку есть ли методики и сервисы?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как правильно оценивать разработку есть ли методики и сервисы?

    Что бы ответить на этот вопрос нужно знать критерии оценки, для конкретного продукта. Например:

    - по времени
    - по стоимости
    - по производительности
    - по поддерживаемости
    - по тестируемости
    - по расширяемости
    - по качеству
    - по защищенности
    и т.д.

    Точность этих оценок на прямую зависит от:

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    На чём построена структура интернета и есть ли шансы положить мировую систему?

    на децентрализации и людях

    Что бы в теории могло убить всю систему?

    уничтожение всех электростанций, или уничтожение электронной промышленности + с запретом использования, или оружие массового уничтожения планетарного масштаба
    Ответ написан
  • Как создать обменник?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Хочу создать онлайн обменик валют, но не могу понять как он устроиен

    Может это не ваше? Есть куча других видов заработка, устройство которых вы вполне сможете понять.
    Ответ написан
    Комментировать
  • Где лучше написать обработчик исключений в самописном MVC?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    В контроллерах, в роутере, если не найден роут, или еще что-то, в апликейшне (у вас это бутстрап), на случай непредвиденных исключений.

    Я очень надеюсь, что вас сильно смущает год выпуска статьи (так уже не пишут),
    на всякий пожарный: https://github.com/index0h/php-conventions
    Ответ написан
  • Как создать свою платежную систему?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Начните с чтения лицензий emi, psp. А дальше наем штата инженеров, сисадминов, юриста, бухгалтера. Когда у вас начрет вырисовываться продукт - нанимайте маркетологов и сейлзов.
    Ответ написан
    Комментировать
  • Как обработать большое количества данных в Symfony без утечки памяти?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Проверьте, включен ли debug режим, очень похоже на то. Для инсертов я бы на вашем месте транзакцию заюзал на пачки в 1к например. 5кк раз пересчитывать индексы - это очень печально. Если категорий у вас не много - имеет смысл их затащить в память все, а дергать мускуль лишний раз не стоит. Смысла в detach при clear / close нет, от слова совсем.
    Ответ написан
    6 комментариев
  • Как подправить код?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Поменяйте имя функции на getEmailById и напишите отдельно функцию, получения по чему-то другому.

    Ваш код ужасен. Очень рекомендую к прочтению: https://github.com/index0h/php-conventions
    Что касается работы с БД, ознакомьтесь с паттерном Repository, в частности с его реализацией Doctrine и не плодите энтропию за зря.
    Ответ написан
  • Что нужно знать для PHP Developer?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ответ написан
    Комментировать
  • Какой язык полезно выучить для понимания современных языков программирования?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Допустим я хочу понять, почему один метод перебора массива эффективнее другого.

    Знание разных языков не даст вам понимания, что такое O и понимания теории алгоритмов.

    Безусловно, я могу замерять скорость и просто использовать самый быстрый.

    Самый быстрый - это уровень железа, всякие языки описания аппаратуры для ПЛИС, ассемблеры и т.д. Без должной подготовки вы даже сложно использовать не сможете.
    За скоростью стоит гнаться только в случае, когда это критичная задача для бизнеса, более того оптимизация за счет алгоритма иногда не имеет смысла.
    Пример: у вас небольшой сайтец, на каком-нить хостинге за полтора бакса в месяц. Под Новый год сайтец не справляется. Правильный вариант в такой ситуации - это переехать на хостинг за два-три бакса в месяц, а потом в случае чего вернуться обратно.

    Какой язык полезно выучить для понимания современных языков программирования?

    Ваш вопрос в корне не верен. Язык - это инструмент для конкретной области задач, выучив его вы будете понимать как решать задачи в этой области. Понимание абстрактных современных языков в вакууме это не даст.

    Понимание абстрактных современных языков в вакууме возникает при понимании задач и их решений в области предназначения того, или иного языка.
    Ответ написан
    Комментировать
  • Бросать исключение или возвращать коды ошибок/успеха? Является ли исключением то, что метод не может выполнить свою задачу?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Бросать исключение или возвращать коды ошибок/успеха?

    Бросать исключение.

    Является ли исключением то, что метод не может выполнить свою задачу?

    Конечно же.

    Но узнать является ли сумма(amount) корректной по-хорошему можно только в браузере/GUI или в Domain слое в самом методе transferMoney().

    К фронту не должно быть доверия, данные обязательно нужно проверять.
    Аргументы метода лучше проверять И на тип И на граничные значения. Например ваш amount по идее должен быть float + больше, или равен 0. Если amount таковым не является - бросайте исключение. Логика выше должна была это отсечь, еще на этапе валидации данных запроса.

    В transferMoney() нужно извлечь данные пользователя(который пересылает деньги) из БД и проверить есть ли у него такая сумма.

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

    Получается в методе transferMoney() есть одна причина неудачи, а что если добавится ещё одна причина, например, пользователю запрещено временно пересылать деньги?

    Тот же комментарий, что и про баланс.

    Поскольку они ожидаемые, то бросать исключения не логично.

    Почему же? Логика выше сможет обработать ваши ожидаемые исключения и через множественный catch определить, что не так. Это вполне нормально, и даже удобно.

    В случае если бы была одна причина неудачи, то можно было бы просто вернуть false.

    Очень хреновая практика. Как вы определите в вызывающем коде, что пошло не так? Что "false"? Баланса не хватает, нельзя делать покупки, или Меркурий в ретрограде?

    возвращать что-то на подобии [false, $error] и [true, null]

    Для php - это очень кривой подход. По двум причинам:
    1. Вы расширяете интерфейс метода, просто так.
    2. Вы нагружаете вызывающий код дополнительными обвязками проверок, опять же просто так.
    В этом нет смысла так как есть механизм try-catch, который отлично решает это задачу.
    Вот пример, допустим ваш transferMoney($amount, User $recipient) должен возвращать объект транзакции, пусть его сигнатура будет:
    transferMoney(float $amount, User $recipient): Transaction
    Вызывающий код знает, что он обязан в конце получить транзакцию, а если что-то пойдет не так - будет исключение, нет смысла в дополнительных проверках, а что если первый элемент массива false, а что если он true, но второй элемент не null, а что если второй элемент не тот, что ожидалось, а что если первый элемент - строка, и т.д.

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

    Верно

    То есть transferMoney() выбросит исключение, которое подымется до Controller'a, и на основе которого Controller отправит 400 Bad Request и причину неудачи.

    Угу

    Или всё таки первый подход к проблеме лучше(первый абзац)?

    Первый подход - это путь боли, ошибок и отчаянья.

    Вот вам еще чтива: https://github.com/index0h/php-conventions
    Ответ написан
    1 комментарий