Задать вопрос
  • Знания Junior php разработчика?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    что должен знать идеальный джуниор (мое личное мнение):

    - Сетевой стэк. Нужно иметь хотя бы базовое представление о том как с сервером общаются. Ну то есть не нужно лезть в дебри, но понимать что такое HTTP или чем TCP от UDP отличается - нужно. В целом это пара часов чтения википедии.
    - GIT или любая другая распределенная VCS. Базовые навыки, что бы хотя бы понимал что есть git revert или git rebase, что такое фичабрэнчи и примерное представление как это работает и зачем надо.
    - Базовые основы unix. Ну то есть что бы не пугаться таких вещей как ssh хотя бы.
    - PHP. Без этого никуда. Он должен понимать что такое слабая динамическая типизация (не заучивать табличку кастов типов, а понимать плюсы и минусы, такая же история с приоритетами операторов - не заучивать а знать как избегать проблем с чтением кода)
    - Понимать что код чаще читают чем пишут, а потому не экономить 5 минут на написании кода, а писать так, чтобы сэкономить 30 минут человеку, разбирающемуся в куске кода.
    - Знать базовые вещи в плане безопасности. XSS и как защищаться, SQL инъекции и как защищаться, CSRF, MITM. Понимать что такое NDA, что данные пользователей - секретная информация. Как хэшировать пароли (не md5 а password_hash) и почему это важно.
    - Знать SQL. Глубоких знаний не требуется, нужно лишь понимание того, что такое нормальная форма, желательно разобраться с вопросом денормализации данных. Идеально иметь хотя бы базовые представления о том как работать с NoSQL решениями.
    - Процедурное программирование: почему глобальные переменные порождают сложность, что такое состояние, как можно использовать классы для изоляции состояния и т.д. Инкапсуляция. Инварианты, пост/пред условия, сохранение целостности...
    - Разделение ответственности. Это один из важнейших принципов, и упрощать все это до "mvc фреймворк" слегка неправильно. Вы должны понимать что от чего отделяете и главное зачем.
    - Автоматические тесты. Джуниор должен знать что это такое и иметь хотя бы минимальный опыт их написания. Должен понимать разницу между юнит и интеграционными тестами. Быть знакомым с пирамидой тестирования.
    - Уметь решать стандартные задачи не задавая слишком много вопросов. Например регистрацию пользователя по email-у вы должны написать, или авторизацию через соц сети, или комментарии, или новостную ленту.
    - Уметь дебажить. xdebug, blackfire и тд.

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

    p.s. Я в списке специально не указывал ООП, поскольку всеравно первые пару лет у разработчиков выходит процедурщина на классах. Это не плохо, но того что в моем списке более чем должно хватать для решения стандартных задач. Но термины вроде "инкапсуляция/полиморфизм/наследование" требуются в обязательном порядке подавляющем количеством интервьюверов, а стало быть знать это надо. Единственное что - рекомендую в свободное время глубже погрузиться в этот вопрос а не тупо заучивать формулировки.

    Так же вещи вроде docker джуниорам знать не обязательно просто потому, что их врядли допустят сходу к управлению инфраструктурой. А так пару неделек на изучение и вперед.
    Ответ написан
    12 комментариев
  • А в чем минусы node.js?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В том же в чем его и плюсы.

    Асинхронность... ее там нет. Там есть event loop что позволяет писать крайне эффективные программы в плане работы с I/O (что для web очень неплохо) и не париться о таких вещях как потокобезопасность, блокировки и т.д. А если еще и несколько инстансов приложения запусть - по одному на ядро скажем, то утилизация вычислительных мощностей выйдет неплохой. Но распаралелить что-то в рамках одного процесса воркера мы уже не можем. Мы не можем посчитать что-то, проанализировать, заняться обработкой жирной картинки прямо при обработке запроса потому что наш процесс воркер так же обрабатываете еще пару десятков запросов, и пока мы будем удовлетворять нужды одного простаивать будут все. Нода хороша когда у нас все состоит из элементарных операций которые не занимают много времени, все жирное надо выносить из основного процесса и разруливать очередями и т.д. Эта проблема имеет массу решений на самом деле, но все уже усложняется и нода теряет свою красоту. Лучше взять Java/c#/Python для этого (и не надо тут вспоминать про шутки с многопоточностью в CPython).

    callback-hell. Собственно наличие event loop диктует так же правила о том, как должна писаться программа. Кучи колбэков, невозможность дебажить нормально и получить четкий стэктрейс из ошибки. Да, есть промисы которые решают первую проблему, да есть либы вроде zone.js которые решают вторую и частично первую проблему... но все это не тривиальное дело.

    Собственно... разработка больших и сложных проектов на ноде возможна... но требует от разработчика хорошие знания и понимание того, как работает его платформа. А это увеличивает стоимость разработки в то время как можно взять более эффективные в этом плане инструменты.
    Ответ написан
    10 комментариев
  • Как сделать Router для PHP фреймфорка?

    miraage
    @miraage
    Старый прогер
    Если Вам нужен именно роутер - самое лучшее решение из существующих.

    https://github.com/nikic/FastRoute
    Ответ написан
    Комментировать
  • Какой micro framework посоветуете?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Берите Symfony 3 в режиме микроядра. Профит:

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

    вот только без ORM.


    Composer же, можно любой взять пакет реализующий ORM. А еще хороший вопрос - нужен ли вам ORM. Это не что-то что дефакто должно присуствовать. Скажем если у вас в качестве базы данных монга - то ORM уже не нужна, так как нет связей между документами (точнее их не должно быть).

    не навязывал свою структуру/архитектуру

    Этому пункту соответствует. Есть общепринятый best-practice но он в принципе только о общих вещах. А структуру вашего кода - это уже сами решайте. Так же нет никаких ограничений по архитектуре вашего приложения, симфони предоставляет вам только адаптеры для UI (HTTP, CLI и т.д.), то есть организация UI приложения. Приложение же само хоть на plain php может быть, просто пользовать инфраструктурой предоставляемой симфони.

    цеплять любые файлы независимо от их "географического" положения.


    Это вы сейчас об автозагрузке или что? Какие файлы? Хватит мыслить файлами, мыслите объектами, нэймспейсами и т.д. А мэппинг этого на файлы один раз прописывается в composer.json.

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

    Для SPA использую это
    Route::get('{path}', function () {
        return view('index');
    })->where('path', '(.*)');
    Ответ написан
    Комментировать
  • Как лучше хранить определенные атрибуты сущности, например тип статьи?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Отдельная таблица лучше, чем в коде PHP делать замены, т.к. данные должны храниться в одном месте, а не в нескольких.

    «Лишний» left join не ваша печаль. MySQL с этим справится.

    Есть ещё вариант без дополнительной таблицы – поле типа ENUM (от англ. enumerated – перечисленные), где буквально перечислены возможные значения.
    Ответ написан
    Комментировать
  • Можно ли обрывать выполнение приложения из кода модели?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Имхо это не по христиански, из модели создавать состояния, этим занимается контроллер, модель о состояниях знать не должна. Возможно для ларавеля это нормально, но в целом это нарушает единую ответственность.
    Ответ написан
    Комментировать
  • Можно ли обрывать выполнение приложения из кода модели?

    za4me
    @za4me
    Человек
    Вынесите запрос к модели в отдельный метод контроллера и вызывайте его.
    Ответ написан
    Комментировать
  • Brackets Extract уже не доступен?

    @xKuzya
    Рукожоп пытающийся кодить xD
    Не только в dreamveawer
    https://assets.adobe.com. Веб версия.
    Ответ написан
    Комментировать
  • Как лучше собрать все диалоги пользователя из таблицы сообщений в mysql?

    @wapmorgan Автор вопроса
    Решил так:
    получение количества диалогов:
    SELECT COUNT(*)
    FROM (SELECT user_id
    FROM v_user_messages
    WHERE receiver_id = 1
    UNION SELECT receiver_id
    FROM v_user_messages
    WHERE user_id = 1) as talks;


    получение последних диалогов, даты последнего в них сообщения и количество непрочтенных для текущего юзера:
    SELECT user_id, MAX(created_at) as updated_at, sum(new) as new_messages
    FROM (SELECT user_id, created_at, new
    FROM v_user_messages
    WHERE receiver_id = 1
    UNION SELECT receiver_id, created_at, 0
    FROM v_user_messages
    WHERE user_id = 1
    ORDER BY created_at DESC) as talks
    GROUP BY user_id
    ORDER BY created_at DESC;
    Ответ написан
    Комментировать
  • Есть ли такие облачные браузеры?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    Ответ написан
    Комментировать
  • Как правильно организовать авторизацию сайта и админки?

    @McBernar
    Боже мой, ну почему каждый второй человек на Тостере советует не делать ничего руками, а сразу из-за любой мелочи хвататься за фреймворк? Ну ведь тогда с каждым годом будет все меньше понимающих язык разработчиков и все больше манки-кодеров, которые прячут голову в песок, если задача выходит за рамки фреймворка. Зачем вы это советуете?
    Ответ написан
    8 комментариев
  • Как правильно организовать авторизацию сайта и админки?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Вопрос из разряда "Дорогой мне красное или синее надеть?". Как сделаете - так и будет. Вопрос вкуса. Я делаю общую. 1 таблица с пользователями и еще 1-3 таблицы для RBAC.
    Ответ написан
    Комментировать
  • Как прописать в html символ из иконочного шрифта?

    Stalker_RED
    @Stalker_RED
    —, represents U+2014
    

    Unicode and HTML

    Мнемоники в HTML
    Ответ написан
    Комментировать
  • Есть ли какие-то подводные камни использования Phpstorm EAP?

    sim3x
    @sim3x
    Передает анонимную статистику своего использования
    Там месячная подписка
    Иногда EAP нет
    Время, когда софт у них крашился прошло много-много лет назад

    Единственная проблема - привыкание к автокомплиту и плюшкам
    Ответ написан
    5 комментариев
  • Как происходит загрузка классов в php фреймворках?

    Не все. Сейчас ради интереса глянул проект, который делаю - он подключает 466 файлов, начиная с Index.php. Пoсле запуска artisan optimize количество файлов уменьшилось почти вдвое (laravel-recipes.com/recipes/60/optimizing-the-fram... - почитайте тут. Плюс в документации посмотрите про кеширование роутов и конфиг файлов через artisan).

    Плюс если вы не используете какую-то модель или контроллер для генерации текущей страницы, они также не будут подключены. По сервис-провайдерам боюсь соврать, но возможно они тоже не подключаются, до момента непосредственного вызова, если они отложенные (https://laravel.com/docs/5.1/providers#deferred-pr...

    А вообще вопрос с файлами решается наверное на всех хостингах использованием кешеров (https://ru.wikipedia.org/wiki/%D0%90%D0%BA%D1%81%D..., файлы не просто грузятся в память, а еще и компилируются для ускорения запуска.
    Ответ написан
    Комментировать
  • Как происходит загрузка классов в php фреймворках?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    И вот у меня возникает такой вопрос. Получается, при каждом запросе пользователя скрипт обращается к диску в моем случае за 3000 файлами каких-либо классов?
    Не знаю как на серверных версиях Windows, но на "домашних" судя по всему, именно так и есть (с учётом разницы производительности, обычно не в пользу Windows). Linux же умеет кэшировать в памяти любые файлы, к которым вы обращаетесь, будь это .php или .jpg - не имеет особого значения.

    P.S. А с учётом того, что файлов 3тыс. а занимают они 10-30Мб (эти 3тыс. файлов), думаю гораздо продуктивнее хранить их в оперативной памяти, чем 3тыс. раз дёргать жесткий диски, особенно если это НЕ SSD-диск. Что собственно ОС обычно и делает :)
    Ответ написан
    1 комментарий
  • Как происходит загрузка классов в php фреймворках?

    @WQP
    1. Подключать их не долго
    2. Кешируется всё

    Это тоже будет полезно php.net/manual/ru/language.oop5.autoload.php
    Ответ написан
    Комментировать
  • Как одним запросом создать в одной таблице несколько строк?

    sabramovskikh
    @sabramovskikh
    Написать метод createAll и передавать в него значения массивом, а из него передавать по форычу в метод create
    Ответ написан
    1 комментарий