• "Сильные" книги по Symfony и архитектуре приложений?

    by25
    @by25
    Веб-разработчик
    1. Мэтт Зандстра "PHP: объекты, шаблоны и методики программирования" - Врубиться в ООП
    2. Эрик Фримэн и ко "Паттерны проектирования" (Head First) - Влюбиться в ООП
    3. Эрик Эванс "Предметно-ориентированное проектирование" - научиться проектировать сложные системы
    4. Крэг Ларман "Применение UML 2.0 и шаблонов проектирования" - про проектирование, глубокое понимание ООП
    Ответ написан
    Комментировать
  • Как создать верный docker файл для проекта?

    miraage
    @miraage
    Старый прогер
    Примерно так выглядит мой конфиг для local development with symfony.
    Это не продакшн конфиг.

    docker-compose.yml
    version: '2'
    services:
      nginx:
        build: ./docker/nginx
        ports:
          - "80:80"
        links:
          - php
        volumes:
          - ./docker/nginx/http.conf:/etc/nginx/conf.d/http.conf
          - ./docker/nginx/site.conf:/etc/nginx/sites-enabled/site.conf
        volumes_from:
          - php
        command: 'nginx -g "daemon off;"'
      php:
        build: ./docker/php
        volumes:
          - .:/src
          - ./docker/php/php-cli.ini:/etc/php/7.0/cli/conf.d/php-cli.ini
          - ./docker/php/php-fpm.ini:/etc/php/7.0/fpm/conf.d/php-fpm.ini
          - ./docker/php/pool.conf:/etc/php/7.0/fpm/pool.d/www.conf
        command: 'php-fpm7.0 -F'
        links:
          - db
          - cache
        environment:
          SYMFONY__DB__DRIVER: pdo_pgsql
          SYMFONY__DB__HOST: db
          SYMFONY__DB__PORT: 5432
          SYMFONY__DB__NAME: dbname
          SYMFONY__DB__USER: dbuser
          SYMFONY__DB__PASSWORD: dbpassword
      db:
        image: "postgres:latest"
        environment:
          POSTGRES_DB: dbname
          POSTGRES_USER: dbuser
          POSTGRES_PASSWORD: dbpassword
      cache:
        image: "redis:latest"
        command: redis-server --appendonly yes


    docker/nginx/Dockerfile
    FROM ubuntu:16.04
    
    RUN apt-get update \
        && apt-get install -y nginx


    docker/nginx/http.conf
    access_log /dev/stdout;
    error_log /dev/stderr;


    docker/nginx/site.conf
    server {
        listen 80;
        server_name example.dev;
        root /src/web;
        index index.php index.html;
        
        location / {
            try_files $uri /app_dev.php$is_args$args;
        }
        
        location ~ ^/(app_dev|config)\.php(/|$) {
            include fastcgi.conf;
            
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_pass php:9000;
            
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            fastcgi_param DOCUMENT_ROOT $realpath_root;
        }
        
        location ~ \.php$ {
            return 404;
        }
    }


    docker/php/Dockerfile
    FROM ubuntu:16.04
    
    ENV PHP_PACKAGES \
            php7.0-fpm \
            php7.0-cli \
            php7.0-readline \
            php7.0-pgsql \
            php7.0-mcrypt \
            php7.0-xml
    
    RUN apt-get update \
        && apt-get install -y $PHP_PACKAGES
         
    RUN usermod -u 1000 www-data


    docker/php/php-cli.ini
    error_reporting = -1
    display_errors = On
    log_errors = Off
    html_errors = Off


    docker/php/php-fpm.ini
    error_reporting = -1
    display_errors = On
    log_errors = Off
    html_errors = On
    cgi.fix_pathinfo = 0


    docker/php/pool.conf
    pid = /var/run/php.pid
    
    [www]
    
    user = www-data
    group = www-data
    
    listen = 0.0.0.0:9000
    
    pm = dynamic
    pm.max_children = 20
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    clear_env = no
    catch_workers_output = yes


    Как разворачивать базу

    Читайте про docker-entrypoint-initdb.d

    Либо же
    docker cp file.sql.gz containername:/tmp/dump.sql.gz
    docker exec -ti containername bash
    gunzip -c /tmp/dump.sql.gz | psql -U username dbname
    Ответ написан
    3 комментария
  • Как правильно реализовать совместный роутинг backend + spa?

    aen
    @aen
    Keep calm and 'use strict';
    У марионетки нет серверного рендеринга, потому говорить о изоморфных приложениях не приходится. Вам на бекенде надо реализовывать REST API, а с роутами разберется сама марионетка.
    Ответ написан
    2 комментария
  • Какие есть книги хорошие книги на английском языке по программированию PHP + MySQL?

    27cm
    @27cm
    TODO: Написать статус
    Modern PHP. New Features and Good Practices (2015)
    Трейты, генераторы, замыкания, OPcache, PSR, Capistrano, xdebug, XHProf... от создателя PHP. The Right Way

    The Clean Architecture in PHP (2015)
    Dependency Injection, MVC, Zend Framework, Doctrine, Laravel...

    Scaling PHP Apps (2014)
    LAMP, HAProxy, Redis, Memcached, CakePHP...

    Все книги легко найти на трекере.
    Ответ написан
    1 комментарий
  • Как учить Angular?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) учим javascript на нормальном уровне (с осознанием что такое контекст, скоупы, замыкания, прототипное наследование и как вообще ООП в js устроено)
    2) разбираемся с MVC и прочими штуками
    3) далее читаем документацию к ангуляру и паралельно гуглим статьи отдельные и все такое
    4) далее читаем angular styleguide (можно паралельно с документацией)

    Все пункты подкреплять практикой.
    Ответ написан
    2 комментария
  • PHP Куда двигаться дальше?

    @b1nary
    php junior
    мне уже 27 лет и возможно работодателей это смущает

    Мне уже 38 лет. Представляете как меня это смущает, однако сегодня еду на собеседование.
    Ответ написан
    Комментировать
  • PHP Куда двигаться дальше?

    wladyspb
    @wladyspb
    Программист
    Если есть понимание как работают фрэймворки, мемкэш, системы контроля версий - рассылайте резюме на все вакансии которые вам нравятся. Сеньёры всем нужны, но их мало) Я так и нашёл хорошую работу - забил на то что в требованиях указано было 6 лет опыта. После общения с тимлидом я оставил у него хорошее впечатление, и меня приняли несмотря на то что мой стаж работы - год с гаком. Мне, кстати, 30 лет) Чтобы иметь за спиной что-то - неплохо поучаствовать в жизни опенсорса, это всегда будет плюсом к резюме, но это опционально. Ещё вариант - хватайтесь за любую возможность сделать сайт - друзьям, знакомым, нахаляву, ради опыта. Если у вас в резюме будет список из нескольких сайтов - это весомый плюс.
    Ответ написан
    Комментировать
  • Книги по структурам данных и алгоритмам?

    В твоем случае - не стоит.

    Желание понять - "..основы - основ", imho тупиковый путь. Лучше ставь цели сделать, что-то простое и работающее. Сортировку, поиск, микро-игру, простой сайт и тп. Ищи такие мануалы, или по англицки getting started tutorial. Они есть для любой техноогии, хоть в тексте, хоть в видео.

    Ну и что с того, что ты запомнишь или будешь понимать, что "массив - это последовательно расположенная совокупность чего-то там..". Главное, что ты - можешь сделать!! А это очень быстро станет понятно, когда начнешь, что то делать по мануалам, хотя бы. Только не обнадеживайся, по мануалу - сделать все не составляет труда, даже для мартышки. А вот использовать мануал, как основу, для своего простенького проекта, это действительно - уже уровень программирования. Там, станут реальные задачи, и сразу станет понятно, насколько это твое. И уверяю тебя, знание основ базвых алгоритмов и базовых понятий, самая легкая задача в проекте.

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

    И не учись в одиночку, а то увязнешь в дебрях. Программирование сейчас - социальная вещь. Ищи ментора, и соратников, чатся. Ходи на тусовки в своем городе и группах в ВК, правда не обнадеживайся, что ты кому-то будешь там важен и интересен. С отсутствием опыта и знаний, тебе предстоит тернистый путь. Читай правильные вещи, типа: tproger.ru

    Удачи.
    Ответ написан
    Комментировать
  • Где найти самое простое объяснение Dependency Injection паттерна?

    iximiuz
    @iximiuz
    Мартин Фаулер круто пишет обо всех паттернах. Про DI можно почитать тут. Вообще у него отличный блог. И он же автор книги P of EAA. Правда русский ее перевод крайне не рекомендую читать, можно только запутаться, так что читайте в оригинале.

    Если хотите разобраться с паттернами, то самая простая (и при этом дельная!) книга - это Фриман&Фриман. Ее можно читать и на русском.

    Применительно к PHP - вот лучшая книга про шаблоны (и не только), которую я видел PHP. Объекты, шаблоны и методики программирования от Мэт Зандстра.

    Порядок прочтения рекомендую следующий: Фриман&Фриман, затем Мэт Зандстра, и на десерт Фаулера P of EAA.

    UPD:
    Важно отличать паттерн Dependency Injection от Dependency Injection Container.
    Простейший пример внедрения зависимости:
    interface IEngine {}
     
    class V8Engine implements IEngine {}
     
    class Car {
      public function __constructor(IEngine $engine) {
        $this->engine = $engine;
      }
    }
     
    $car = new Car(new V8Engine());

    Простейший пример игнорирования явного внедрения (для такого кода трудно писать unit-тесты, его труднее понимать и править):
    class V8Engine {}
    
    class Car {
      public function __constructor() {
        $this->engine = new V8Engine();
      }
    }
    
    $car = new Car();

    Отличный (и легковесный) пример DIC - это pimple:
    // define some services
    $container['session_storage'] = function ($c) {
        return new SessionStorage('SESSION_ID');
    };
    
    $container['session'] = function ($c) {
        return new Session($c['session_storage']);
    };

    Советую прочитать и понять его исходники, чтобы убедиться, что в DIC (во всяком случае для PHP) нет никакой магии. Первая версия была всего ~100 строк. Необходимо также отметить, что класс Session использует шаблон Dependency Injection, явно определяя свою зависимость от SessionStorage. А контейнер делает лишь правильную связку.

    И да, контейнер сам по себе можно использовать как service locator, если к нему, например, есть глобальный доступ. Но это очень плохая практика, потому что если что-то обращается к сервис локатору, то формально оно начинает зависеть сразу от всех компонентов системы.
    Ответ написан
    4 комментария
  • Изучение Java: мотивация, перспективы, краткий план?

    @Einsteinnew
    Тема интересная и меня самого давно занимает, я с очень похожими вводными данными 31 год, два высших, да не тех - учу java на протяжении 9 месяцев, уже сформировалось определенное видение как именно максимально продуктивно обучаться. Как раз занимаюсь поисками единомышленников и на среднесрочную перспективу планирую осваивать Канаду))
    Оставляю свою электронку, p.pydzirov@mail.ru, пиши
    поделюсь теми граблями на которые я уже наступил )))
    Ответ написан
    1 комментарий
  • Каков план личностного развития PHP программиста с нуля?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Есть опыт помощи таким начинающим.
    реальный срок до запуска джуниора - полгода, никого не слушайте.

    Важные моменты
    веб-программирование на базе PHP - это стек технологий: PHP/SQL/CSS/HTML/JS + Linux хотя бы азы + знание важных инструментариев (FTP, Git/SVN, работа с БД)
    чистый PHP плюс даже все перечисленное выше - не особо нужно и не интересно. Нужно знание конкретных платформ: фреймворков и/или CMS. (Почитайте вакансии на Хантиме по запросу PHP, обратите на это внимание). Навскидку самые востребованные (спорно конечно): Yii фреймворк, CMS Битрикс и Wordpress.

    Как начать?
    Смело на амбразуру!
    1) Установите у себя рабочую среду LAMP/WAMP - Apache, PHP, MySQL. Для этого возьмите пакет Denwer или OpenServer, что больше понравится. Сделайте Hello World просто как HTML, потом на PHP, потом алертом на JS. Порадуйтесь.
    Установите все редакторы кода. Кто там вам будет рекомендовать блокнот или notepad++ - не слушайте. Варианты: если машина мощная (4+ Гб памяти и пр.), берите редактор phpStorm (для php/html/css/js). Если не очень мощная - берите komodo edit. Для работы с БД инструмент встроен в Denwer/OpenServer, это phpMyAdmin
    2) Идеально, если вы договоритесь сделать кому-нибудь сайт. Бесплатно или за небольшую плату. Если нет - сами себе поставьте задачу: сайт про котиков/про детей etc. Красивый сайт, с галереей, с эффектами, с материалами
    Возьмите CMS Wordpress и попытайтесь сделать сайт у себя на компьтере. Настоящий сайт, во всей красе, как вы хотите. Правьте его, смотрите код, экспериментируйте. Сообщество огромное, вы найдете ответы на все свои вопросы
    Потратьте чуть денег, купите себе домен и хостинг, залейте сайт на хостинг.
    Порадуйтесь. Похвастайтесь.
    3) Ищите в сети тестовые задачи и решайте их, изучайте материалы собеседований, вопросы - их много.
    4) Зарегистрируйтесь на odesk.com под каким-то фейковым email, пройдите тесты по PHP, CSS, HTML, jQuery, Wordpress, а во время прохождения делайте скриншоты вопросов. Потом изучайте эти вопросы, ищите ответы, далеко не обязательно на все. Тесты вы, конечно, не пройдете, но вам нужны только вопросы.
    5) Постоянно следите за вакансиями "PHP-программист", "веб-программист" на Хантиме, на hh.ru и подобных ресурсах.

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

    Вот как раз на полгода.
    После этого у вас появится масса информации, и дальше вы сами сориентируетесь.
    Ответ написан
    11 комментариев