• Gulp и nip, нужно ли устанавливать и как?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Гайд по установке gulp, серьезно?))

    npm install gulp -g

    gulp - это таск раннер, чаще всего используется для сборки проекта.
    Ответ написан
    2 комментария
  • Должны ли иконки социальных сетей подсвечиваться?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Должны ли они по правилам подсвечиваться?

    Если в ТЗ прописано, что должны - да, если прописано, что не должны - нет. Если в ТЗ об этом ни слова - уточните у автора ТЗ, или человека в роли product owner.

    Вроде слышала, что кликабельные элементы должны подсвечиваться или главное, чтобы юзер понял, что объекты кликабельные?

    С точки зрения UX подсвечивать стоит, однако то, что прописано в ТЗ приоритетнее.
    Ответ написан
    3 комментария
  • Можно ли сохранять в git папку vendor после composer update?

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

    Если другие разработчики делают git pull и не обращают внимания на изменения - это их проблемы. Хорошим тоном является уведомление от автора правок в composer.json, что остальным стоит его обновить.

    Список библиотек и версии обновляются не очень часто, а при каждом релизе, приходится выкачивать одни и те же либы

    Вообще говоря композер умеет в кэш и одни и те же версии либ тянутся с кэша.

    В проекте могут быть заняты люди, которые не умеют (или не могут в данный момент) работать с консолью: верстальщики, технические писатели, ревьюер кода (безопасности), сюда же и вопрос оплаты специалиста, которые умеет всё

    Если нужно именно поднять окружение с проектом - настройте vagrant и пропишите в README как им пользоваться конкретно для вашего проекта.
    Что касается людей:
    * верстальщики - vagrant
    * технические писатели - я конечно не в курсе вашего проекта, но я бы доступ даже к репозиторию не дал, максимум - завел отдельный репозиторий для них.
    * ревьюер кода (безопасности) - ревьюер, который не может в composer / консоль?? Шутка не удачная.
    * сюда же и вопрос оплаты специалиста - лолшто? Это вообще не связано с окружением вашего проекта, ну вот ни капли.

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

    Если у вас проект НЕ opensource - то такого делать в принципе нельзя. Доступ к репозиторию должны иметь специалисты, которые работают с кодом этого проекта и ни кто другой, а composer тут вот ни капли ни при чем!

    Вопрос в том, можно ли сохранять папку vendor в git

    НЕТ! Вы придумали НЕ существующую проблему и пытаетесь героически ее решить, только от этого решения будет еще хуже.

    насколько это противоречит принятому стилю

    на полностью

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

    1. Вы становитесь вендором кода, который взяли где-то, как следствие вы следите за его обновлением, у изначального вендора и вы проводите аналогичные правки в своем проекте. Если так не делать - баги, найденные в этой зависимости сами себя не пофиксят и этот код будет быстро устаревать.
    2. В код зависимости появляется соблаз провести собственные наработки - это то, что делать нельзя, иначе процесс обновления будет сложнее на порядки.
    3. Ваш репозиторий разбухнет.
    4. Композер вашу зависимость придется явно прописать иначе автолоад может ее не подтянуть.

    Использует ли кто-нибудь такую практику в своих проектах ?

    Пару лет назад работал на крупном проекте, который начинался до появления композера. Когда зависимостей тьма и ты не знаешь, какие из них содержат артефакты собственных наработок, какие обновляются синхронно с официальными вендорами, а какие тянутся из вне приходится тратить кучу времени на выяснение. Это просранное время.
    Ответ написан
    1 комментарий
  • Как безопаснее PDO?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Ни первое, ни второе.

    0. SQL запросу ну вот ни как не место в аргументах, это то, что должен делать ваш insert метод. Все что он должен получать - это аргументы которые будут вставляться в ваш запрос!
    1. Вы не проверяете аргументы. Что произойдет, если я вызову insert:
    $db->insert(new \Exception(), []);
    Или так
    $db->insert("DELETE FROM user", []);
    Или так (тут lastInsertId вернет не id вставки)
    $db->insert("SELECT CURRENT_TIMESTAMP", []);
    2. Никогда, слышите? НИКОГДА! Не используйте при работе с БД суперглобальные переменные. Их удел - в самом начале index.php собрать объект Request, далее про их существование можно забыть.
    3. datab обычно называются connection, либо по типу класса
    4. В следующем коде нет смысла, от слова "совсем"
    }catch(PDOException $e){
                    throw new Exception($e->getMessage());

    Вы просто обрубаете стектрейс, который далее стоит использовать для поиска ошибок.
    5. У вас ключи строковые, зачем вот это?
    unset($arr[$key + 1]);
    6. Если в params передать [[]], как себя поведет ":$key"?
    7. lastInsertId возвращает строку, кастовать в ваш тип не помешает.
    8. Ради всего святого: прочитайте и следуйте PSR

    Вот вам пример безопасного кода. Проверок в реальном коде должно быть на много больше:
    * логин стоит прогнать по регулярке на допустимые символы
    * почту стоит прогнать по регулярке, или через filter_var
    * что пароль таки хэш (смотря какой алгоритм используете)
    * если будут еще поля не строковых типов - их подключаем через bindValue с указанием типа
    Тут сделано допущение, что подключение PDO уже настроен на бросание ошибок. В задачи репозитория не входит конфигурирование коннекшна.
    По хорошему это дело еще и в транзакцию обернуть.
    <?php
    declare(strict_types = 1);
    
    class UserRepository
    {
        /** @var \PDO */
        private $pdo;
    
        /**
         * @param PDO $pdo
         */
        public function __construct(\PDO $pdo)
        {
            $this->pdo = $pdo;
        }
    
        /**
         * @param string $login
         * @param string $email
         * @param string $password
         * @return int
         * @throws \InvalidArgumentException
         * @throws \PDOException
         */
        public function insert(string $login, string $email, string $password): int
        {
            if (empty($login)) {
                throw new \InvalidArgumentException('Argument "$login" must be not empty');
            } elseif (empty($email)) {
                throw new \InvalidArgumentException('Argument "$email" must be not empty');
            } elseif (empty($password)) {
                throw new \InvalidArgumentException('Argument "$password" must be not empty');
            }
    
            $sql = '
            INSERT INTO `user`(
                `login`,
                `email`,
                `password`
            ) VALUES (
                :login,
                :email,
                :password
            )';
    
            $this->pdo->prepare($sql)->execute(
                [
                    ':login' => $login,
                    ':email' => $email,
                    ':password' => $password
                ]
            );
            
            return (int) $this->pdo->lastInsertId();
        }
    }
    Ответ написан
    Комментировать
  • Как добавлять комментарии в Instagram без api?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    phantomJS
    Ответ написан
    Комментировать
  • Как поставить ограничение?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Assert::assert($year, 'year')->int()->between(1, 31);

    Ссылка на библиотеку

    Мой вам совет: забудьте про существование ошибок, только исключения, это вам дико упростит жизнь.
    Ответ написан
    Комментировать
  • Какую CRM-систему (сервис, сайт) выбрать для сервисного центра?

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Сравнение лицензий
    На сколько я понимаю, включая ссылку в документации на pm2 с примером как им пользоваться вы не будете нарушать лицензию, при этом в составе вашего ПО как зависимость этот пакет будет отсутствовать. Судя по примерам - он все равно глобально должен быть установлен, ваш же фреймворк (чисто по идее) станет подключаемой частью приложения.
    Если же pm2 будет именно частью вашего приложения - распространять придется на условиях GPL.

    На счет систем запуска процессов - посмотрите supervisord
    Ответ написан
    2 комментария
  • Нужно ли портфолио для дизайнера?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Некоторые считают, что оно не нужно, я считаю, что оно важно

    Те, что считают, что не нужно - видимо не искали работу.

    Портфолио - это ваше лицо перед работодателем. Если "лицо" у вас страшное - работу найдете, но за еду, если "лица" вовсе нет - не найдете.
    Ответ написан
    Комментировать
  • Как начать осмысленную разработку веб приложений на php?

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

    PSR - СВЯТОЕ, ОБЯЗАТЕЛЬНО ЗНАТЬ

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

    Если нужно понимение, что и зачем - Symfony ну и разве что Zend.
    Никакие Laravel, Yll тебя хорошим практикам не научат, увы. Это я как в прошлом фан yii говорю.
    Что так? Погугли на тему: "Singleton antipattern", "ActiveRecord antipattern"
    Ответ написан
    Комментировать
  • Continuous delivery, Continuous integration, Docker при "многоверсионном" приложении. Как организовать?

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

    На самом деле это оптимальное решение. У вас создается релизная ветка в которую в случае проблем именно на этой платформе будут вливаться фиксы, не мешающие другим. Далее когда релизный образ оттестирован и дан зеленый свет - они размазывается по проду. То что тегов много - да какая разница?)) У вас есть возможность получить состояние любой сборки.

    Схема кажется немного избыточна nginx->nginx->php, в итоге на сервере дофигища разных процессов, особенно nginx.

    Тут все зависит от того, можно ли отдавать клиенту доступ на прямую к nginx2. Если нельзя - ваша схема вполне норм. Если же можно - тогда стоит это делать, смотрите в сторону своего балансировщика, который будет отдавать клиенту сервер, который А - жив, Б - минимально нагружен и штук типа consul.

    ansible забирает из гита исходный код, грузит на сервер, в контейнеры исходники пробрасываются через volume.

    Зачем? Контейнер как бы иммутабельный и все такое. Если у вас там кучка статики подсасывается не под git - смотрите в сторону mogilefs и т.д. Безусловно, для разработки volume - самое оно, но для прода - ну такое..., должна быть веская причина.
    Ответ написан
    1 комментарий
  • Первый проект для изучения PHP фреймворков - что делать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    nepster09 В основном по делу сказал, но вот Laravel - погорячился. Хотите качественный фреймворк - Symfony, Zend. Из маленьких фреймворков могу посоветовать Silex.
    Встаёт 2 вопроса: какой фреймворк лучше выбрать - Yii2 vs Laravel?

    Symfony
    ...а ещё лучше и коммерческий потенциал/общественная польза?

    Symfony
    Может быть, не хватает какого-то специфичного сервиса или агрегатора?

    Ну это вам писать, так что не хватает того, что сможете реализовать))

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

    Вообще говоря под такой запрос подходит в принципе любой.

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

    Git - святое
    Vagrant - окружение
    Ansible - для конфигурирования виртуалки под Vagrant
    Плагины шторма: Symfony2 Plugin, Symfony2 - Clickable Views, PHP Annotations

    Рекомендую почитать на досуге
    Ответ написан
    7 комментариев
  • Обычные константы, или константы в классе?

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

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

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

    Вы не должны этого хотеть. Это противоречит самому понятию Repository-Entity.
    Репозиторий - работает только с БД и только с этити.
    Энтити - только хранит в себе данные и более ничего.

    Не пытайтесь превратить Repository в ActiveRecord, добром это не закончится.

    Если вам нужны зависимые энтити - тогда пропишите их в аннотациях.

    Если нужно вызывать именно метод репозитория: это делается через DI в сервисах, либо через $this->getDoctrine()->getManager()->getRepository('AppBundle:MyEntityName') в контроллерах.

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

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

    Достаточным, что бы вам оформили офер. Тут нет жестких критериев, должен знать: а, b и c и тебя сразу возьмут.
    По сути вы должны стать специалистом, который будет выгоднее, чем местный.

    Так же интересно обязательно ли высшее образование в этой области

    Один мой друг собирался в Германию, при наличии офера и всех доков, но без ВО, увы, в рабочей визе отказали. Возможно в США по другому.

    какой уровень английского нужен и прочие атрибуты не относящиеся к программированию, но нужные при эмиграции.

    Достаточный для свободного общения.

    PHP на уровне функционального программирования (изучаю ООП), опыт работы с Modx CMS, немного работал с Laravel 5.2 ...

    Смотрите в сторону стажировки, судя по описному, вам еще до джуна дорасти нужно.
    Ответ написан
    3 комментария
  • Нормальный ли принцип CMS я сформулировал?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Нормальный ли принцип CMS я сформулировал?

    Вы сформулировали вовсе не принцип CMS)).
    - Что произойдет при запросе HEAD/OPTIONS/PUT/DELETE?
    - Что произойдет, если отправить вам такое: ?act[]=logout?

    На счет реализации роутера - посмотрите Silex.

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    От кого вы пытаетесь защититься?))
    - от рядового пользователя. Он даже не подозревает о существовании php
    - от прогера, которому оно не особо надо. Он по тыкает палочкой 15мин и забъет.
    - от прогера, которому капец как надо. Он ваш код взломает.

    Защиту можно обеспечить как saas, но все зависит от того, что именно вы пытаетесь предоставить как сервис.

    некоторые cms без лицензии могут работать только на денвере но не на живом хостинге.

    хрень какая-то)) т.е. под линухой такую cms запустить нельзя что-ли?))
    Ответ написан
    2 комментария
  • Как оценить стоимость проверки кода сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Элементарно, посмотрите вакансии на должность Team Lead у конкурентов. Чаще всего в задачи TL входит code review. Однако,
    то ли делает что нужно, правильно ли он это делает

    Вот это уже ближе к QA.
    Ответ написан
    Комментировать
  • Какие есть объективные причины для перехода на Linux вебразработчику?

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

    Как правило, это на порядок удобнее.

    Да, можно под виртуалкой запустить линуху, но зачем?)
    Да, можно эмулировать линушную консольку, но половина хоткеев у вас работать не будет.
    Да, можно докер в виртуалке поднять, но под линухой он будет нейтивно работать.
    Да, можно считать, что вагрант вас спасет, но тот же ансайбл придется таки вовнутри поднимать, а не использовать хостовой.
    Да, можно приблуды для виртуальных рабочих столов прикрутить, но зачем, это идет в коробке с большинством DE.
    Да, можно по полной программе обмазываться putty и понасохранять все ваши доступы, но проще настроить ~/.ssh/config.
    Да, можно понаустанавливать вот это ваше все с официальных сайтов, но проще натапть "apt install **", или "yum install **".
    Да, можно залезть в политики безопасности и сделать "зашибись", но для обычной dev тачки под nix чаще всего вам это и не нужно.
    Да, можно закачать крутых прог, которые вам скрытые процессы покажут, но проще ввести есть ps aux.
    Да, можно в .gitattributes понапрописывать text eol=lf, но опять же зачем, если только у винды принят crlf?
    Да, можно понаотключать BOM, но опять же зачем?
    Да, можно считать реестр - удобной штукой, но это не так))
    и т. д...

    Из таких мелочей и состоит пользование ОС.

    Чуть не забыл:
    Да, можно считать, что комп под виндой принадлежит вам...))
    Ответ написан
    12 комментариев