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

    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 комментарий
  • Определение живых пользователей от ботов?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Цель любой защиты - сделать ее взлом не выгодным. Самая дешевая защита:
    1. Проверка user-agent
    2. CSRF
    3. Гугло каптча перед важным действием
    4. Блокировка на N минут после неудачного входа / важного действия

    Простые атаки это отсечет, но не более. Невидимая картинка вас спасет от примитивных curl/wget, не более. WebDriver ко многим защитам на стороне браузера (секреты в localStorage, iframe, ...) не восприимчив.

    Те защиты, что я привел - тоже не дают особых гарантий, но они довольно дешевые
    Ответ написан
    2 комментария
  • Почему в контроллерах MVC-фреймворков на PHP несколько действий?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Обычно это просто удобно, так как в одном контроллере можно разместить действия с одной сущностью, либо объединить их по какому-то другому признаку. Бывает, что несколько экшнов юзают общий приватный метод, который нет смысла выносить в отдельный сервис, и дублировать между файлами не хочется.
    В случае вытягивания зависимостей контроллера из контейнера выигрыша от разделения контроллера на экшны нет, от слова "совсем".
    Если же зависимости контроллера вставляются через DI - выигрыш будет в том, что не нужно будет пробрасывать зависимости не нужные конкретно в этом экшне, а так же упростится unit тестирование.
    Ответ написан
    Комментировать
  • Почему вход в web сейчас такой сложный?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Почему вход в IT сейчас такой сложный?

    Потому, что куча халявщиков повелась на сказки.

    это типичные требования на джуна/верстальщика

    Вакансии не всегда составляют компетентные люди, но как пример - вполне норм требования.

    ЗП 6-8к грн , я понимаю что не все сразу , но когда уборщица и охранник получают как минимум в 2 раза больше , это очень странно!

    Почему же? Зачем платить много, если и так куча желающих, готовых работать за еду?

    И все хотят что бы ты пришел и сразу вкалывал без вопросов , никто учить не хочет и не собирается

    Почему вдруг с вами должны сюсюкаться? Работа - это не детсад и не школа.

    повышение почти не реально добиться

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

    надо год вкалывать за хлеб , а дальше , глядишь и поднимут на 100$ ЗП

    Если вы реально выросли как спец - самое время менять работу и просить больше. Если не выросли - ну что ж, страдайте.

    В итоге , надо 2-3 года вкалывать , что бы перестать работать за еду. Что не так с IT?

    да все так, it - это не халява.
    Ответ написан
    Комментировать
  • Какая программа поможет просто создать трёхмерную анимацию?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если проблема не исчезнет, обратитесь к странице технической поддержки по адресу <адрес>" как справиться с этой проблемой?

    Хороший вопрос содержит ответ
    обратитесь к странице технической поддержки по адресу <адрес>
    Ответ написан
  • Сильные и слабые стороны PHP 7?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Чаще всего это буквально значит: знание назначения языка. Язык - это инструмент для ограниченного количества задач. Бывают случаи, когда инструмент выбирается не на основании объективных требований задачи, а на основании субъективных хотелок исполнителя. Php это, или что-то иное, не имеет значения.
    Ответ написан
    1 комментарий
  • Почему частота у современных процессоров низкая?

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

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вам точно это нужно? Операция удаления - довольно длительная, пересчет индексов - тоже.
    Вы можете для выборки добавить переменную, содержащую номер рядка https://stackoverflow.com/questions/13566695/selec...
    при этом вытягиваете последнюю 1000 записей
    Ответ написан
    Комментировать
  • Можете поревьюить?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Критерии оценки беру тут: https://github.com/index0h/php-conventions конечно часть по оформлению, от части вкусовщина, но хотя бы PSR уважать надо.

    1. В док блоках для свойств очень не плохо было бы указать типы и привести их к camelCase.
    2. Почему private методы вначале класса?))
    3. У вас отсутствует валидация аргументов в методах. Что будет, если в конструктор запихнуть не токен, а объект например, с остальными методами - тоже.
    4. В приватных статических методах нет смысла (если честно статика в принципе штука довольно вредная, по ссылке описано почему).
    5. filter* методы - не очень, откройте для себя array_shift и array_pop, вам в принципе нужны эти методы?
    6. В методе getReplyTimes заюзайте array_filter
    7. Я не знаю, что представляет собой $messages, но по хорошему - это должно быть что-то типа Entity с геттерами и сеттерами, с гарантиями структуры данных. Если это какой-то \stdClass - это очень печально.
    Ответ написан
    2 комментария
  • Парсинг json в go?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • Обновление MySQl по расписанию?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Делайте обработку в консольном режиме, а не в рамках http запроса
    Ответ написан
    Комментировать
  • Какие преимущества создания сайта на самописном движке перед тем же Wordpress?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Какие преимущества создания сайта на самописном движке перед тем же Wordpress?

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

    Выиграю я по оптимизации относительно того же Wordpress в техническом плане?

    Зависит от задачи. Если WP уже ее решает - скорее всего нет.

    С какими проблемами могу столкнуться или на что следует обратить внимание?

    На этот вопрос можно ответить только на основании ТЗ, или продуктового брифа.

    Что нужно сделать в самописном движке, чтобы он наверняка был круче CMS (быстрее, оптимизированне и т.д.)?

    Если чисто в техническом плане - можете использовать следующие соглашения https://github.com/index0h/php-conventions . Сразу гнаться за скоростью и оптимизированностью не рекомендую, потратите не порядок больше времени.

    В продуктовом же плане, сделать ширпотребную cms с теми же задачами, что и у WP и таким же охватом аудитории - это практически не реально на данный момент.
    Ответ написан
    Комментировать
  • Как бороться со стрессом на работе?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Вы на этапе "Долины отчаянья", это пройдет.
    83f4597e975f8f1963ed7e24a8297eba.svg

    То, что ваш ТЛ постоянно меняет тех стек, это одновременно и хорошо, и плохо: больше разнообразия - больше возможностей по ковырять ту, или другую технологию. Если же причина смены технологий обоснована хотелкой попробовать новое, а не конкретными выгодами для продукта - ваш ТЛ, видимо не традиционной ориентации.
    Ответ написан
    1 комментарий
  • Реально ли написать CMS одному?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Реально ли написать CMS одному?

    Да

    Нужно ли?
    Для целей самообучения - да. Для продакшна - нет.

    Upd

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

    Я понимаю, что есть много успешных кейсов по самописным cms. Но тут как и с другими проектами: единицы успешны и куча неудачных.

    Если у автора возник такой вопрос я предполагаю, что опыта у него мало, как следствие качесвенную систему написать самотужки он не сможет, именно по этой причине метить на продакшн - плохая идея. А вот для самообучения и понимания как в принципе такие системы работают смысл есть.
    Ответ написан
    8 комментариев
  • Имеет ли смысл использование Docker?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Импакт от докера по ресурсам довольно низкий, но для такого куцого сервера он может быть ощутим.
    Тонкую настройку он не обеспечит, а сложностей добавит.
    Про лоад балансер забавно. Какой смысл заморачиваться с распределением нагрузки на калькуляторе?
    На счет утечки - исправить таки стоит. Что касается восстановления при падении - смотрите в сторону supervisord, что касается убивания обожравшегося процесса - oom killer.

    Те, кто в теме, подскажите, насколько это оправдано(docker-compose уже собран и готов к работе)?

    Для dev целей - оправдано, для оркестрации в рамках одной машины - оправдано.

    Чем лучше оркестрировать docker-compose

    Да как бы сам docker-compose вполне себе оркестрирует на одной машине.

    как обновлять приложение без простоя

    Это вопрос процесса разработки. Само приложение должно разрабатываться так, что бы в момент релиза могли существовать как минимум две версии релиза.
    Но, у вас по утечке ребутается php-fpm, не парьтесь.

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

    На основании средней и пиковой нагрузки.

    https://www.youtube.com/watch?v=lHpVxk9TPA8
    Ответ написан
  • Как работать с этим Монго дб?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Выдумать себе опыт работы — это хорошая идея?

    Если ваша цель - получить репутацию лгуна и попасть в черные списки HR-ов, то идея отличная.

    самого стартапа в интернете, конечно же, нет

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

    Проверяют ли hr факт существования подобных стартапов?

    Могут

    Может мне сайт склепать, рассказывающий, что проект действительно существовал и заморожен?

    Нет смысла

    стоит ли указывать, что есть готовность работать за стоимость проезда на работу (5000-10000 т.р.) или это отпугнет потенциальных работорговцев?

    Цену лучше вообще не указывать. Стоит указать, что ваша цель - получение опыта. Как вариант - можете поискать работу волонтером, или по делать сайтики куму-свату-брату.
    Ответ написан
    Комментировать