• Как планировать спринт, если во время спринта всплывают критичные баги от пользователей?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    делить разработчиков - ничем не обоснованная мысль - вы не сможете грамотно сбалансировать нагрузку между ними, всегда будет часть разработчиков простаивать - всегда будут кто-то кто медленнее или быстрее будет делать часть работ, больше делений, больше таких вещей.
    опять же уверен, лучше всего баги править тому кто делал этот функционал, ему по крайней мере не надо объяснять что там и как работает.
    ========
    По поводу спринтов и фикса багов.
    Баги будут всегда, начните разрабатывать продукт предполагая что во всех узлах и модулях уже есть баги (так оно на самом деле и бывает), это сразу поменяет подход к разработке - перейдя на схемы в которых продукт работает независимо от сбоя и багов в отдельных модулях.
    В итоге вы получите всегда рабочий продукт независимо от багов, в котором вы можете в любой момент начать отдельные спринты по повышению качества его работы (снижению уровня багов).
    В текущем спринте вы работает только над текущими поставленными задачами - это закон (ничего другого не берете). Срок спринта фиксирован - что успели то успели, все остальное переносится или на другой спринт, или вообще выкидывается.
    В этом вся суть, иначе какой вообще смысл в этих спринтах если вы просто там сидите и над какими-то багами из прошлых этапов ковыряетесь.
    Ответ написан
    Комментировать
  • Как организовать сеть контейнеров с помощью docker-compose?

    Использую docker-compose file version 2

    Создаем вручную сеть
    docker network create myglobalnetwork

    Описание сети добавить в каждый файл
    networks:
      mynetwork:
        external:
          name: myglobalnetwork

    Сервисам задаем алиасы для сетей по которым контейнеры будут общаться
    services:
      nginx:
        build: ./nginx
        networks:
          mynetwork:
            aliases:
              - nginx.mynetwork
      postgres:
        build: ./postgres
        networks:
          mynetwork:
            aliases:
              - postgres.mynetwork

    Здесь nginx.mynetwork и postgres.mynetwork являются внутренними dns адресами контейнеров
    Ответ написан
    2 комментария
  • Почему не получается запустить миграцию(php yii migrate)?

    Melkij
    @Melkij
    PostgreSQL DBA
    Access denied for user 'yii2user'@'localhost' (using password: YES)'

    База вас слушает и слышит. И ей не нравится как вы представились.
    Проверяйте, есть ли таковой пользователь, точно ли у него такой пароль.
    Ответ написан
    3 комментария
  • Как правильно мержить ветки в git?

    EXL
    @EXL
    Энтузиаст
    Зачем разные части одного проекта помещать в отдельные ветки? Кажется, у вас неправильное представление смысла веток, которые используется в Git'е. Ветка в этой DCVS -- это всего лишь указатель на состояние рабочего каталога. И реализовать Work Flow, описанный вами на ветках Git'а не то чтобы сложновато, но зачем и для чего мучить бедный Git, который при каждом

    git checkout
    будет вам разворачивать поддерево то одного проекта в ваш рабочий каталог, то другого. Это во-первых, жутко неоптимально с точки зрения той же производительности, а во-вторых вы так совсем запутаетесь, тем более раз вы ещё включили в рабочий процесс слияния между этими ветками. Конфликтов слияния и трудностей таким образом можно достигнуть множество. Пожалуйста, обратите внимание на работающие подходы, используемые для разработки с использованием Git:

    Если в ваших частях проекта выражена очень разная функциональность, то можно создать два отдельных репозитория (к примеру, fronted и backend), а затем, при необходимости, соединить их в один Git-суперрепозиторий в качестве его подмодулей.

    Если одна часть -- зависимость от другой, то следует подключить эту зависимость submodule'ем или вообще поддеревом (см. главу 6.7. из книги Скотта Чакона - Pro Git).

    Если это всё же монолитный проект, имеющий две части, например, первая часть содержит реализацию логики приложения в "./src/core", а вторая -- пользовательский интерфейс в "./src/ui", то их и вовсе не нужно разделять.
    Ответ написан
    Комментировать
  • Как в yii2 верси 2.0.14 и выше выключить автоматическую конвертацю JSON из БД в массив?

    @itcoder
    Необходимо config/main.php добавить

    'container' => [
            'definitions' => [
                \yii\db\pgsql\ColumnSchema::class => [
                    'class' => \yii\db\pgsql\ColumnSchema::class,
                    'disableJsonSupport' => true,
                ],
            ],
        ],
    Ответ написан
    Комментировать
  • Как создать веб-сервис, который будет извлекать аудио из видео?

    Zoominger
    @Zoominger Куратор тега Веб-разработка
    System Integrator
    Главная проблема - с чего начать? Можете подсказать как лучше все это организовать, какое ПО может пригодиться?

    Ну вообще, на мой взгляд всё просто.
    Пишем простенький интерфейс, который позволит выбрать файл с видео и загрузить на сервер (хватит даже PHP), на сервере с помощью ffmpeg вытаскиваем звук и отправляем обратно пользователю.
    Свистоперделки можно прикрутить уже позже.
    Ответ написан
  • Как выполнить команду программно и автоматически ответить на вопросы?

    @Flying
    Если речь идёт о частном случае данной команды - то ответ довольно прост и легко ищется в исходных текстах. Вот как проверяется возможность запуска команды миграции, как видно - здесь используется метод canExecute(), посмотрев в который можно заметить что он контролируется флагом --no-interaction. Более того, банально вызвав help по этой команде можно было бы увидеть ответ на свой вопрос написанный прямым текстом:
    Or you can also execute the migration without a warning message which you need to interact with:
    
        bin/console doctrine:migrations:migrate --no-interaction


    Если же речь идёт об общем подходе к тому как запускать консольные команды которые требуют пользовательского ввода - то здесь ответ довольно находится в документации Symfony. Если посмотреть в исходные тексты ConsoleTester о котором говорится в этом разделе, то видно что основная идея - использование специального input'а. Таким образом решение становится довольно простым:
    1. Получаем и клонируем Kernel
    2. Создаём новый консольный Application
    3. Создаём и конфигурируем ArrayInput
    4. Запускаем приложение с нужным нам input'ом

    Весь основной код для этого можно, очевидным образом, подсмотреть в bin/console самой Symfony.
    Ответ написан
    2 комментария
  • Какие плюсы у PHPStorm перед Visual Studio Code?

    Начинал с notepad++ затем сублайм, затем глючный атом, потом был vscode ну и в конце phpstorm. Да и остальные всякие разные редакторы пробовал. NetBeans, PHPeD(неплохая штука кстати), Eclipse. У шторма есть несколько плюсов, которые возвышают его над конкуретнами. Во первых из коробки он может намного больше чем надо. Удобная работа с гитом? Есть. (особенно клевый интерфейс для мерджей). Поддержка тестов есть, эмет есть...да куча всего есть. При этом достаточно быстро работает. Это одна из немногих ide, в которой ты работаешь, а не сражаешься. Я так привык к шторму, что любые другие редакторы не идут. Заходить в vscode, затем подтягивать кучу плагинов, настраивать все это, словить пару багов...не. Не хочу. Надоело.
    Ответ написан
    Комментировать
  • Как работать с websocket в php без библиотек?

    @xfg
    Прочитать соответствующий RFC https://tools.ietf.org/html/rfc6455 чтобы понять, как происходит рукопожатие и какие байты в переданном сообщении за что отвечают. После этого будет понятно как написать реализацию. Я досконально уже не помню, но фактически от клиента приходит обычный http запрос с определенными заголовками, сервер разбирает этот запрос и если всё ок, то сохраняет открытое соединение в массив, если нет, то отправляет соответствующий ответ и закрывает соединение. Дальше по открытому соединению начинает сыпаться поток байтов от клиента их нужно разбирать, чтобы понять длину сообщения, сами данные переданные в фрейме, закончился фрейм или еще нет и тому подобное. Обратно также кодировать данные в поток байтов и отправлять по открытому соединению. Каждый байт в переданном фрейме несет определенный смысл. Обо всем этом подробно написано в RFC, но на английском. Вообще это хорошо примерно понимать как работает, но глупо писать такую низкоуровневую реализацию, когда есть готовые. Такие вещи развивают и поддерживают годами. Вы же не пишите HTTP серверы, а берете готовые вроде nginx и тому подобное.

    В каком месте можно полученные данные подготовить к записи в бд.

    Как сделать, что бы на стороне клиента, один websocket отвечал за сообщения, другой за статьи. (Или за эти два действия отвечает один websocket, тогда как мне на сервере это различать).

    Вебсокет это низкоуровневая штука, для передачи потока байтов от клиента на сервер, в отличии например от HTTP, где есть заголовки и тело сообщения. Поверх вебсокета нужно делать еще один протокол или самописный или выбрать один из готовых. Это проще говоря, то как выглядят ваши фреймы (сообщения), которые вы отправляете с клиента на сервер и назад. Например клиент может отправлять такой фрейм:
    ["id", "controller/action", {param1: value1, param2: value2}]

    в ответ получать
    ["id", "OK"]
    если запрос был обработан успешно или
    ["id", "ERR", {error: "action not found"}]
    если произошла ошибка. По переданному id в массиве, можно понимать, к какому запросу относится ответ.
    Для уведомлений (событий) сервер может отправлять клиентам что-то такое
    ["user_added", {user: {...}}]
    и т.д. Этот протокол необходимо придумать самому или выбрать из готовых (популярных пока нет) и написать его реализацию (клиентскую и серверную часть) или опять же взять уже готовую.

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

    Но это уже всё должно быть, просто возьми real-time фреймворк. Там за тебя написали и websocket сервер и протокол поверх него и экшены уже есть. Всё низкоуровневое уже готово. Бери и пиши приложение. В nodejs самый популярный это например https://github.com/socketio/socket.io, а в php я не знаю, но уверен, что тоже есть что-то популярное.

    Своё написать не получится, без опыта и без попыток сделать приложение на чем-то готовом. Нужно как минимум прочитать RFC и посмотреть реализации других разработчиков. Для этого нужно быть кем-то больше, чем "программистом сайтов".
    Ответ написан
    1 комментарий
  • Как и когда выгодно покупать продукты JetBrains?

    miraage
    @miraage
    Старый прогер
    Тема повторяется из года в год.

    https://toster.ru/answer?answer_id=956226#answers_...


    Если работаете по найму и не можете себе позволить лицензию - попросите компанию ее Вам купить.
    500р/месяц в первый год, -20% за второй год, -40% в последующие, если подписка всё время активна - это совсем немного.

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

    DeLaVega
    @DeLaVega
    Верстаю, фронтэндю =)
    Ну так скрипт всё верно отрабатывает, вы в каждой итерации перезаписываете значение.

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

    this.parent('. gr_field').find('.byn_').html(someValue)
    this.parent('. gr_field').find('. rur_').html(someValue)
    и тд.

    ну и оптимизировать - this.parent('. gr_field') вынести в переменную.

    Как-то так:
    https://codepen.io/vitaliy_kirenkov/pen/daoWMP
    Ответ написан
    1 комментарий
  • Что требует от меня клиент?

    lukoie
    @lukoie
    Он согласен заплатить фиксед, но за прототип, чтоб в итоге понять то ли это что он хочет. Очень интересно, ведь доделки и фиксы он видимо захочет на почасовку, а в итоге это может получиться выгодней. Ведь если он заплатил бы полную оговоренную сумму денег за проект, в итоге мог бы мозг выкручивать по каждой мелочи на доделках и фиксах, растянув время.

    Еще он хочет пошаговый алгоритм создания сайта. Возможно в итоге фиксед прайс захочет по каждому шагу, а не за проект в целом. Тоже в принципе норм. Ведь если заплатит полную сумму за проект, потом попросит залить его на хостинг, оптимизировать фоточки, еще чего придумает - уже сложней будет договариваться за доп.оплату, ведь он же считает что он уже заплатил за норм.результат, а оптимизированные его(!) фоточки и передача сайта на хостинг это считается частью закрытия проекта. Так что в данном случае Вы в выигрыше, если всё опишете подробно и с эстимейтами по времени/деньгам. И да, в т.ч. оптимизация графики и заливка на хостинг.
    Мне например, за перенос вордпресс сайта с хостинга на хостинг 35 баксов оплатили. При этом чувак, который это попросил, не для себя делал, и с клиента себе 20 баксов тоже получил. А так, если делаешь сайт, по сути заливка на хостинг и оптимизацию графики вроде и не считают чем-то, за что надо отдельно платить...
    Ответ написан
    1 комментарий
  • Что требует от меня клиент?

    EYPPNM
    @EYPPNM
    I'm not gonna tell you about anything, here
    В английском языке артикль играет очень важную роль
    a proposal это не просто предложение, а это то, что самое важное в его словах на чём следует сконцентрироваться
    Тоесть, выделен термин, общепринятый:
    https://www.beewits.com/web-design-proposal/

    От вас требуется составить Оферту (от англ. гл. offer - предлагаю)
    https://en.wikipedia.org/wiki/Proposal_(business) или бизнес предложение не иначе.
    https://ru.wikipedia.org/wiki/Оферта (РУС)
    https://uk.wikipedia.org/wiki/Оферта (UA)

    В ответ вы получаете или не плоучаете Акцепт https://ru.wikipedia.org/wiki/Акцепт

    Оферта имеет юридическую силу
    Ответ написан
    Комментировать
  • Что требует от меня клиент?

    opium
    @opium
    Просто люблю качественно работать
    По сути он хочет платить по частям за каждый этап
    Сейчас готов предложить фикс за прототип
    Ответ написан
    2 комментария
  • Как уменьшить время получения данных с удаленной БД?

    hack504
    @hack504
    А репликация бд за бугор нарушает ФЗ-152? (Нет). Чтение с локального, запись на удаленный.
    Ответ написан
    3 комментария
  • Как в yii2 сделать валидацию поля только для гостя?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Много вариантов, можно разные модели иметь для разных типов юзеров, можно использовать: https://www.yiiframework.com/doc/api/2.0/yii-valid...
    Можно юзать сценарии и https://www.yiiframework.com/doc/api/2.0/yii-valid...
    Наверное еще есть варианты, но думаю этих хватит
    Ответ написан
    3 комментария
  • Как в yii2 сделать валидацию поля только для гостя?

    @morricone85
    Проще всего это сделать с помощью сценариев, например:

    $model = new Feedback;
    if ( --условие-- ) {
        $model->scenario = Feedback::SCENARIO_GUEST;
    }

    в моделе:
    [['username', 'password', 'email'], 'required', 'on' => self::SCENARIO_GUEST]

    и т.д.
    Ответ написан
    Комментировать
  • Как реализовать склонения слов по падежам на Yii2?

    mashletov
    @mashletov
    Math.random()
    Я раньше пользовался подобной функцией. Не знаю, насколько это плохо:

    class Helper
    {
        /**
         * Выбирает слово с правильными окончанием после числительного.
         *
         * @param int $number число
         * @param array $words варианты склонений ['яблоко', 'яблока', 'яблок']
         * @return string
         */
        public static function plural(int $number, array $words): string
        {
            return $words[($number % 100 > 4 && $number % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][min($number % 10, 5)]];
        }
    }
    
    // echo "Загружено $count " . Helper::plural($count, ['запись', 'записи', 'записей'];
    Ответ написан
    Комментировать
  • Объясните, зачем нужны документо-ориентированные БД (MongoDB)?

    Если абстрагироваться от таких «мелочей» как производительность, масштабируемость и надёжность, то Д(окументно)О(ориентированные)СУБД и О(объектно)О(ориентированные)СУБД во многих случаях позволяют разработчику отражать сущности предметной области на сущности БД без введения дополнительных сущностей :), которые приходится вводить в Р(еляционных)СУБД. Например, сколько копий переломано в спорах о том, как хранить в РСУБД объекты различных классов, унаследованных от одного базового класса (в одной таблице с кучей пустых полей, в таблицах для каждого отдельного класса, в общей таблице общие поля, ...), а тут просто храним в одной «таблице» и не думаем о таких мелочах. Отношения 1:1 и 1: М, когда сущности во второй половине отношения принадлежат одной и только одной сущности первой и не имеют смысла без неё также отображаются без дополнительных таблиц и полей для связи (вместо comments.post_id и comments.content просто храним в поле posts.comments список/массив комментов, не заботясь о целостности связей, синхронизации и т. п.). Другими словами, ДОСУБД часто облегчают жизнь разработчику, хотя иногда её усложняют (когда связи двунаправленные прежде всего, особенно M: М — для установления связи между двумя уже существующими сущностями надо производить две операции — добавление к первой ссылку на вторую, а ко второй на первую -, а не одну — добавление в таблицу связи — как в РСУБД )
    Ответ написан
    Комментировать
  • Есть ли сервисы онлайн генерации формы html, чтобы я мог забрать её к себе на сайт в виде строчек html?

    kores
    @kores
    Помог ответ? Отметь решением!
    Забирай, расставляй как хочешь, не забывай вписать значения в name
    <form>
    <input type="text" name="">
    <input type="number" name="">
    <input type="radio"  name="">
    <select name="">
    <option>Вариант 1</option>
    <option>Вариант 2</option>
    <option>Вариант 3</option>
    <option>Вариант 4</option>
    </select>
    <textarea name="" rows="4" cols="30"></textarea>
    <input type="submit" name="submit" value="Отправить">
    </form>
    Ответ написан
    Комментировать