• Как структурировать разработку веб-приложений?

    @Vitsliputsli
    Зачем? Что вы хотите получить? Что вам не нравится сейчас?
    Нет универсальных решений, чтобы все было хорошо, смотреть нужно по ситуации. К примеру, есть ли смысл контейнеризировать, на это вы сможете ответить только сами. Прикиньте плюсы и минусы, стоит ли сейчас тратить на это время, чтобы получить сомнительные (а может и нет) плюсы. Когда для всех разработчиков есть одинаковое готовое окружение - это хорошо, но когда эти все - 2 человека, стоит задуматься.
    Насчет схемы, опять же, что вы хотите ей решить, что есть у вас сейчас. Если этой схемой вводите ветку dev - отлично, будет где интегрироваться разработчикам. Сказать, что это должно быть must have - да, но для спринтовой релизной системы, при rolling releases и отсутствии постоянной необходимости интегрироваться - не обязательно.
    Если же хочется просто следовать трендам, то по этим вопросам docker и git-flow.
    Ответ написан
    Комментировать
  • Как правильно писать ТЗ?

    @Vitsliputsli
    ПМ обычно не пишут ТЗ, т.к. ТЗ - это техническое задание, т.е. подразумевает техническую экспертизу. Если же речь, про некие функциональные требования, то писать обычным человеческим языком, придерживаясь правила писать то, что хотим получить и для чего, а не как это реализовывать. Этого вполне достаточно. Будет ли на основе этих требований формировать ТЗ отдельный специалист или сам разработчик, это вопрос организации компании.
    Разработчик - это переводчик с человечьего языка на язык машин, если он не знает одного из языков, то беда. Поэтому этакий разработчик-интроверт, который не умеет общаться, но отлично пишет код, это проблема, т.к. переводчиком он работать не сможет.
    Но как бы вы не писали ФТ или даже ТЗ, без коммуникаций во время разработки результат может неприятно удивить, отсюда и стали развиваться различные agile-направления. Насчет "писать обычным человеческим языком" тоже не нужно бросаться в крайности, а то были на моей памяти "одаренные", которые удаляли блок-схемы описывающие бизнес-логику и писали их человеческим языком в меру своих возможностей, это, конечно, уже бред.
    Исходя из всего перечисленного, вполне возможно, что ваша проблема не в "правильном" написании ТЗ, а отсутствии коммуникаций и подхода "ничего не знаю, я сделал как в ТЗ" со стороны разработки. Проблема частая, но одним простым советом ее не решить.
    Ответ написан
    Комментировать
  • Какой порог входа QA?

    @Vitsliputsli
    Порог входа такой же как везде. В одной компании, как написали "одна рука и один глаз, можно без ног", в другой вас будут спрашивать об инструментах автоматизации и методологиях тестирования.
    Ответ написан
    Комментировать
  • Что значит концепции программирования?

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

    @Vitsliputsli
    Но, у одного юзера может быть несколько ID (так устроена система).

    Значит это не id юзера. Сделайте реальное id юзера и указывайте его в ваших алиасах. Далее группируйте по реальному id юзера. Либо сделайте таблицу соответствия и группируйте через нее.

    Что-то вроде GROUP_BY (users.id = 123 OR users.id = 789).

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

    @Vitsliputsli
    SELECT * FROM user WHERE name='дима'

    SELECT * FROM user WHERE binary name='дима'
    И указывайте СУБД с которой работаете, ваш вопрос специфичен именно для MySQL.
    Ответ написан
    Комментировать
  • Почему при отправке данных с помощью fetch, они не приходят в PHP?

    @Vitsliputsli
    Документация:

    $_POST — Переменные HTTP POST
    Ассоциативный массив данных, переданных скрипту через HTTP методом POST при использовании application/x-www-form-urlencoded или multipart/form-data в заголовке Content-Type запроса HTTP.

    А у вас application/json, соответственно просто берите входные нераспарсенные данные.
    Ответ написан
    1 комментарий
  • Стоит ли учить несколько языков программирования?

    @Vitsliputsli
    Язык - это инструмент, как фреймворк, как библиотека и т.п. Их изучают при необходимости использовать или при потенциальной необходимости использовать при потребности рынка. И как уже писалось множество раз, языки вторичны, изучать нужно программирование, разработку в первую очередь.
    Ответ написан
    Комментировать
  • Как справиться с синдромом самозванца на новом месте?

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

    @Vitsliputsli
    Куда бы вы размещали шаблоны модуля админки? Вместе со всеми в папке views/layouts или в папке views/layouts/admin, то есть вот если несколько шаблонов для админки, то выделять ли их из шаблонов приложения отдельной папкой, как это сделано в контроллерах и вьюхах?

    В директории mymodule/views/layouts. Если это действительно модуль, т.е. отдельный, функционально независимый кусок кода.
    Ответ написан
  • Как исправить логическую ошибку в использовании флагов?

    @Vitsliputsli
    Или в операциях == и != что-то не так?

    Используйте операторы сравнения === и !==, и сравнивайте с учетом типа переменных.
    0 не равен false, но при динамичской типизации, будет произведено приведение типов и затем сравнение.
    Чтобы не возникало вопросов, таких как у вас сейчас, сравнивайте однотипные данные, а не предполагая, что будет после динамического приведения типов.
    Ответ написан
    7 комментариев
  • Как LEFT JOIN-ом присобачить только одну сроку, причем не любую, а наибольшую по данному полю?

    @Vitsliputsli
    select
            u.*,
            ph.phone_max
        from users u
        left join (
            select 
                    user_id, max(phone) phone_max
                from phones 
                group by user_id
        ) ph on u.user_id=ph.user_id
    Ответ написан
    2 комментария
  • PostgreSQL создания одного индекса для нескольких колонок одного типа?

    @Vitsliputsli
    Составной индекс - это не 2 разных индекса. Частичное использование составного индекса позволяет его использовать, как индекс на 1 поле, но только для 1 поля, а не 2х.
    Ответ написан
  • Одновременная покупка товара?

    @Vitsliputsli
    Наиболее простое решение - это блокировка данных на период выполнения бизнесовой транзакции, либо модификации запросов с идентификатором состояния. Конкретное решение будет зависить от вашей архитектуры и типа СУБД. Одного использования sql транзакций недостаточно, т.к. стандартный уровень изолированности транзакций не блокирует данные. Зачастую выбирают механизм SELECT FOR UPDATE, но его крайне не рекомендуют использовать в MySQL (во всяком случае в 5.7), да и в Oracle бывают сложности с ним.
    Ответ написан
    2 комментария
  • Как проверить массив на пустоту после array_diff?

    @Vitsliputsli
    но почему то под нулевым индексом что то есть

    Документация по explode:
    Если delimiter не содержится в string, и используется отрицательный limit, то будет возвращен пустой массив (array), иначе будет возвращен массив, содержащий string.
    Ответ написан
  • Как вывести и группы и аргументы агрегирующей функции и её результат без повторного обращения к таблице?

    @Vitsliputsli
    Для MySQL 5.7 можно через сортировку, таким образом:
    SELECT 
        qt,
        CASE WHEN @group!=gr THEN @qt_min:=qt ELSE @qt_min END min,
        CASE WHEN @group!=gr THEN @group:=gr ELSE @group END gr
      FROM qw, (select @group:=0) t
      ORDER BY gr,qt

    Но, конечно, лучше так не делать.
    Ответ написан
    Комментировать
  • Как правильно реализовать такой цикл, где сделал ошибку?

    @Vitsliputsli
    $i = 0;
    foreach ($posts as $post) {
        if ($i % 2 === 0) { 
            echo '<div>'; 
        }
        echo '...';
        if ($i % 2 === 1) { 
            echo '</div>'; 
        }
        $i++;
    }
    Ответ написан
    Комментировать
  • Как передать данные из базы в константу?

    @Vitsliputsli
    Цитата из мануала по PHP о константах:
    Значение должно быть неизменяемым выражением, а не (к примеру) переменной, свойством или вызовом функции.
    Ответ написан
    Комментировать
  • Как исправить (не выводит и не передаёт по сокету данные)?

    @Vitsliputsli
    Если вы ожидаете увидеть "OK" в переменной $read, то его там уже нет, он будет перезаписан пустой строкой (если больше нет данных, то возвращается пустая строка). Тем не менее, данные вы сохраняете в $fde, и соответственно там и надо искать "ОК".
    Ответ написан
    1 комментарий
  • Скажите пожалуйста куда писать жалобы на работодателя?

    @Vitsliputsli
    Чтобы кто не говорил, у работадателя очень много обязанностей и перед кандидатами тоже. Если у вас есть письменная причина отказа (а по требованию вам ее обязаны дать) и она не соответствует истине, можете обратиться в трудовую инспекцию.
    Только она вам действительно надо? Что вы хотите добиться? Устроиться туда работать после такого?
    Ответ написан
    Комментировать