• Как удобно выполнять composer / npm / artisan / ... в Docker?

    @vladitot
    Если я правильно понял, то вопрос стоит в том, чтобы удобно выполнять повторяющиеся операции внутри докер-контейнеров.
    У меня возник напряг с тем, что нужно постоянно подключаться внутрь контейнеров и выполнять операции внутри них. Поэтому я набросал себе простенький плагин для композера.
    Делался для себя. Если кому-то покажется интересным и накидаете issues, то займусь допиливанием.
    https://github.com/vladitot/composer-extra-plugin
    Ответ написан
    2 комментария
  • Есть ли актуальные книги по архитектуре средних/крупных веб-проектов на PHP?

    malinichev
    @malinichev
    PHP-Developer
    На самом деле DDD это не так уж и сложно, за месяц можно освоить азы и уже начать писать репозитории и разделять бизнес-логику...
    А вообще рекомендую почитать padabum.com/d.php?id=221470
    Ответ написан
    Комментировать
  • Есть ли актуальные книги по архитектуре средних/крупных веб-проектов на PHP?

    Чтобы всё сложилось в голове, нужно поработать со средним/крупным проектом. Тогда всё сложится. Как иначе? Если вы хотите до устройства на работу уже получить опыт - сделайте что-то для себя. Например, простенькую социальную сеть. Представьте, что фотографии закачиваются пользователями рекой. Вам их нужно хранить, масштабировать, временами выводить сервера из обращения для обслуживания и при этом, в идеале, чтобы всё продолжало работать как ни в чём не бывало. Как это сделать? Вот тут вам пригодится и Mongo с его схемой данных, появляющейся "на лету", и микросервисы и вообще - придётся подумать как это всё будет друг с другом взаимодействовать так, чтобы [почти] на нарушалась целостность данных и [почти] всё было доступно 24/7.
    Ответ написан
    Комментировать
  • Есть ли событие окончания обработки формы (не ajax)?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    единственный рабочий вариант - на сервере по окончании работы скрипта писать в сессию флаг "готово", с фронта каждые N секунд отправлять аякс запрос на скрипт который проверяет наличие флага в сессии.
    Ответ написан
    6 комментариев
  • Есть ли событие окончания обработки формы (не ajax)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема отправить и получить файл через Ajax?
    В HTML создаётся пустая ссылка:
    <a href='' id='report-link' download style='display: none;'></a>
    В JS:
    var data = new FormData();
    data.append('file', document.getElementById('file').files[0]);
    var post = new XMLHttpRequest();
    post.open('POST', 'where/to/send', true);
    post.onreadystatechange = function() {
      if (post.readyState != 4) {
        return;
      }
      hideSpinner();
      switch (post.status) {
        case 200:
          var a = document.getElementById('report-link');
          a.href = '/get/file/from&id=' + post.responseText;
          a.click();
          break;
        ...
      }
    }
    showSpinner();
    post.send(data);

    То бишь, отправили файл через Ajax, дождались ответа, подставили его идентификатор в ссылку и кликнули по ней.
    Ответ написан
    5 комментариев
  • Как получить дату ближайшей субботы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const getDateOfNearestDay = (day, date = new Date()) =>
      new Date(
        date.getFullYear(),
        date.getMonth(),
        date.getDate() + ((7 + day - date.getDay()) % 7)
      );
    
    
    const dateOfNearestSaturday = getDateOfNearestDay(6);
    Ответ написан
    1 комментарий
  • Где хранить базу данных для сайта?

    Softer
    @Softer
    Сделайте меню и мероприятия ссылками на google doc и откройте его для чтения всем.
    Ответ написан
    Комментировать
  • Не могу понять для чего нужны Entities в ООП PHP, Yii?

    @thyratr0n
    Есть разные подходы к пониманию смысла этих вещей.
    Entities чаще всего используются в контексте DDD-подхода. Там это означает то, что объект может изменять свое состояние (фигура может менять цвет, стакан может заполняться и тд). Супротив Entities выступают т.н. ValueObject, которые используются только для чтения и менять свое состояние не могут.
    И те, и другие используются в бизнес-логике приложения и генерируются либо хранилищами (storage), либо сервисам (в зависимости от выбранного подхода).

    В контексте же Yii понятие Entity не применяется. ибо там структурной единицей бизнес-логики выступают экземпляры ActiveRecord чаще всего (сам фреймворк к этому располагает), либо, иногда, наследники Model.

    Главное - это то, что сущность не обязательна должна сохраняться as is, т.е. иметь четкую проекцию в БД, ибо сущностью может выступать экземпляр паттерна Композит - все зависит от хранилища/сервиса, который это дело будет "CRUD'ить".
    Ответ написан
    2 комментария
  • Как сделать рандом из массива с указанной вероятностью для элементов?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Сложить все веса. Их сумма это 100%, «единица».
    Взять случайное число от 0 до 1.
    Спроецировать на ваш диапазон, посмотреть, куда попали.

    $sum = array_sum($a);
    $rnd = rand() / getrandmax(); // от 0 до 1
    $runningSum = 0;
    foreach($a as $k => $v) {
      $runningSum += $v / $sum;
      if ($runningSum >= $rnd) {
        $key = $k;
        break;
      }
    }
    if (!$key) $key = $k;
    
    echo "Выпало: " . $key . PHP_EOL;
    Ответ написан
    5 комментариев
  • Как сделать рандом из массива с указанной вероятностью для элементов?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Приводим коэффициенты к целым числам пропорционально так, чтобы минимальный коэффициент равнялся единице, остальные округляем до единиц. Таким образом получаем на выходе массив с целыми числами, где отношения в пропорции элементов друг к другу будут близкими к изначальным. Далее на основе этого промежуточного массива генерируем новый, с диапазонами, для первого элемента от 0 до его значения, для каждого последующего от суммы всех предыдущих значений до сумма + текущее значение. Таким образом весь массив диапазонами покрывает значения от 0 до суммы всех величин из первого промежуточного массива, которую обозначим как S. Далее используем только второй массив с диапазонами, для каждого элемента выборки генерим рандомное число R от 0 до S, и находим ключ согласно тому диапазону, куда в каждой итерации попадает R.

    По идее данный алгоритм идентичен варианту Дмитрия, но эффективен по части использования памяти. Опять же, его тоже можно оптимизировать. :)

    ЗЫ: Те же яйца, но в профиль предложил Сергей Соколов
    Ответ написан
    2 комментария
  • Как сделать рандом из массива с указанной вероятностью для элементов?

    А я бы все веса поделил на наименьшее из них (N_i = вес_i / вес_min), и с полученными значениями N_i создал бы массив из букв, где каждая повторяется N_i количество раз.

    А далее или перемешал бы его, или брал бы из него случайным образом очередную букву
    Ответ написан
    6 комментариев
  • Как по двум коэффициентам определить вероятность?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Никак.
    Команда "Архаровцы" из Нижнего Кукуева имеет коэффициент прошлых побед 10.
    Команда "Атлетико" из Мадрида имеет коэффициент прошлых побед 8.
    Каковы шансы победы архаровцев?
    Ответ написан
    2 комментария
  • В чем преимущества *nix, linux перед windows (для веб разработчика)?

    @spotifi
    Нету никаких проблем.
    Если только ваше конкретное используемое для ваших задач ПО нормально работает с Windows.

    Например, в моем случае используется Ansible и Docker, который не поддерживается на Windows. Приходится использовать Vagrant. Это достаточно удобно. Но ресурсы все же кушает.

    А так - даже Vim хорошо себя чуствует на Windows. Нативный. Не cygwin.

    Microsoft это тоже понимает.
    И вот уже они встроили подсистему Linux Ubuntu в Windows 10. Это не виртуализация, а именно полноценная подсистема.

    И многие вещи, например, те же шрифты - в Windows работают лучше, чем под Linux.

    Могут сказать - что лучше использовать для разработки ту же среду что и для production.

    Но дело в том, что даже если вы сидите на Ubuntu Desktop, то ваша среда серьезно отличается от среды сервера FreeBSD, CentOS, Debian, Ubutntu Server. И для полноценного CI все равно умные дядьки категорически рекомендуют и на Linux даже использовать Docker для полноценной эмуляции.

    Но ведь Docker-то можно использовать и на Windows. Правда, запускается он там подольше.

    Где именно вести разработку, где вам удобнее - это ваше личное дело. Вопрос ваших предпочтений. Никаких объективных причин в наше время, когда существуют Docker, Vagrant и виртуальные машины, когда куча приложений изначально сделанных для *nix запускаются в native под Windows - нет никаких причин себя строить. Кроме любопытства - а как оно там на других системах живется.

    У тех кто вас троллит есть еще одна причина: им приятно показать себя более умными. Как же - ведь Linux можно сконфигурить руками.

    Ага, конечно.

    Или используют готовые десктопные дистрибутивы. Не зря Ubuntu так популярна.
    Или если освоили ArchLinux - то построили себе совершенно убогое окружение по готовым мануалам.

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

    На деле 99% твердящих о гибкости Linux - далее чем ставить Apache и MySQL из пакетов - ничего сами и не умеют. Фактически работая в то же настроенной другими людьми десктопной среде. Но разве вы не умеете делать то же самое под Windows?

    Другое дело, что разворачивать и тестировать нужно под аутентичным операционным окружением.
    Неважно под Ubuntu ты сидишь или под Windows.

    Лучшие практики советуют использовать полностью изолированный и независимый от рабочего места разработчика инструментарий - виртуальные машины, Vagrant, Docker, отдельные физические сервера.

    В этом случае под твоей любимой ОС работает только текстовый да графический редактор. А все развертывание для тестирования и для продакшн проводится в совсем другой среде.

    Используя Docker хоть под Windows ты будешь получать даже больше преимущество повторяемости рабочей среды чем тем кругом, кто советуют тебе просто перейти на Linux. Если на более слабом железе это и было бы существенно (Docker под Linux стартует быстрее), то на твоем - несущественно на чем работать.
    Ответ написан
    9 комментариев
  • Является ли установка php/node на хост антипаттерном веб-разработки в 2018?

    Stalker_RED
    @Stalker_RED
    Задайте себе вопрос "зачем я это делаю?".
    Если у вас есть хороший ответ, типа "мне нужна изоляция для безомасности", или "легкость переноса мне важнее чем оверхед", или "чтобы изучить эту технологию", то все хорошо.

    А если ответы типа "быть как все" или "следовать современным модным трендам" - это так себе ответы, и не стоит связываться.
    Ответ написан
    1 комментарий
  • Является ли установка php/node на хост антипаттерном веб-разработки в 2018?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нет большего сигнала о профессиональной несостоятельности, чем бездумное следование хайпу.
    5bdd915d02d54566963967.jpeg
    Ответ написан
    6 комментариев
  • Какой уровень MySQL/MariaDB нужно знать среднему php-программисту?

    un1t
    @un1t
    Потом, он начал говорить, что этого недостаточно, нужно знать как это устроено на уровне файлов и чуть ли не исходников субд. Это действительно, я должен знать подобные тонкости?


    Нет это заморочки конкретного человека.

    Эксплейн надо понимать, что он выводит и как с его помощью найти проблему, оптимизировать запрос. А так нужно знать про индексы, селективность, транзакции, джойны, group by, having, подзапросы.

    Я много раз видел что люди спрашивают, зачем знать SQL, если есть ORM. Десять лет назад, люди спрашивали обратное - зачем нужен ORM, если я тоже самое могу написать на SQL. У меня ощущение, что веб-разрабы с опытом работы от пары лет вовсе не знают SQL. Либо они используют только ORM, либо вообще какую-нибудь MongoDB (хотя во многих случаях ее использование не адекватно задаче).

    Ну и от команды к команде средний уровень сильно разнится.
    Ответ написан
    Комментировать
  • Какой уровень MySQL/MariaDB нужно знать среднему php-программисту?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для миддла надо подтянуть только п. 3. У Светы Смирновой есть несколько отличных презентаций по работе с explain, они легко находятся гуглом.

    Еще желательно различать транзакции и блокировки, когда что использовать.

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

    Вообще, по моему опыту, не стоит переоценивать результаты интервью. Когда я 5 лет назад ходил по собеседованиям, то после двух из них, которые я сам посчитал проваленными, мне прислали предложения о работе.
    Ответ написан
    1 комментарий
  • Каким образом можно сохранить instance объекта между запросами?

    profesor08
    @profesor08
    Записывай весь вывод команды в файл, на фронт выводи содержимое файла. В результате получишь весь нужный вывод.
    Ответ написан
    Комментировать
  • Каким образом можно сохранить instance объекта между запросами?

    Никак. Можешь во время выполнения записывают текущий процесс в "файл". И уже из файла взять готовые данные.

    Я так понимаю в данном месте Artisan::call('youtrack:sync', [], $buffer);
    вы вызываете свое какое то консольное приложение. А "youtrack:sync" это какая то команда. Вот там внутри и нужно процесс записывать в файл.
    Ответ написан
    Комментировать
  • Как правильно подключить стиль компонента?

    kleinmaximus
    @kleinmaximus
    Senior Full-stack Javascript Developer
    Импортировать стили надо там же, где Вы подключаете саму библиотеку. Ни к чему разносить это в разные части кода. Если Вам мозолят глаза расширения .css в js-коде основной программы, то можете сделать отдельный модуль, который будет подключать как саму библиотеку Element-ui, так и стили, а уже этот модуль подключать в свое приложение. А вообще в документации довольно подробно описано как подключать стили, и почему сделано именно так.

    Кстати, а что такое app.scss, и как оно у Вас подключается?

    1) Как вообще правильно подключать стили компонента? Писать style тег во .vue / импортировать из .vue / подгружать вебпапом отдельно в app.scss?


    2) Есть ли какая-то разница между import (default) и require при использовании webpack (laravel mix)?

    Это разные системы модулей - подробнее об этом (и не только) здесь. Советую изучить все материалы из данного учебника - вопросов у Вас будет на много меньше :)
    Ответ написан
    3 комментария