• Какие есть российские хакатоны?

    vhood
    @vhood
    Не забывайте отмечать решения
    Я иногда смотрю группу в telegram
    Ответ написан
    Комментировать
  • Как объединить базы данных через API Gateway?

    vhood
    @vhood
    Не забывайте отмечать решения
    API Gateway - это паттерн микросервисной архитектуры. Это отдельный сервис, фронтенд взаимодействуют с ним, а он перенаправляет запросы.

    Есть еще один паттерн, Saga. Тоже отдельный сервис.
    API Gateway может послать запрос на изменение данных, которые хранятся в двух разных базах, в Saga, он отправит запрос нескольким разным сервисам и если один их них отвалится - отправит другому запрос на откат.

    Для просмотра можно вобще четвертую базу взять и сервис. В этой базе будут лежать данные максимально подготовленные под запросы, т.е. что-бы запрос, например, можно было построить без джойнов и точно использовались бы индексы. Это из CQRS.

    Резюмируя, могу посоветовать погуглить Saga и CQRS, а лучше прочесть книгу Микросервисы
    Ответ написан
    Комментировать
  • Как сделать вертикальную группировку файлов?

    vhood
    @vhood
    Не забывайте отмечать решения
    Пока никак, но есть костыль:

    Можно сделать дополнительный сайдбар (View -> Appearance -> Secondary Sidebar) и переместить на него панель Open Editors из Explorer
    Ответ написан
    3 комментария
  • Как устроена команда git push?

    vhood
    @vhood
    Не забывайте отмечать решения
    Как устроена команда git push?
    вот так

    Можете дать подобное описание для git push?
    А что не так с описанием?

    git push отправляет данные в удаленный репозиторий...
    Ответ написан
    Комментировать
  • Какие есть годные альтернативы OpenServer?

    vhood
    @vhood
    Не забывайте отмечать решения
    После OpenServer могу посоветовать перейти на виртуалки, например поднять debian в virtualbox (или другом менеджере).

    Затем научиться разворачивать те сервисы, которые использовались в OpenServer, в linux (из примера выше - в debian на виртуалке).

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

    Затем можно погружаться в Docker, т.к. он работает на linux namspaces и контейнеры обычно базируются на популярых дистрибутивах, например Ubuntu (Который основан на Debian). Это похоже на работу с виртуалками, но немного сложнее в понимании, т.к. образ со всеми пакетами разворачивается исходя из настроек Dockerfile, конфиги копируются в нем же, либо пробрасываются в docker-compose, либо пробрасываются при запуске из консоли. Нужно понимать отличия, понимать как работают unix права, уметь подключаться в контейнер и смотреть что там происходит, анализировать логи в потоке вывода, который можно посмотреть отдельной командой.
    Конечно, можно взять готовый docker образ под проект, но далеко не всегда его достаточно и приходится от них наследоваться и переписывать.
    Ответ написан
    Комментировать
  • Не работает кнопка закрытия модального окна предпросмотра в Yii2 kartik FileInput. Как исправить?

    vhood
    @vhood
    Не забывайте отмечать решения
    кнопка закрытия модального предпросмотра

    - 'showClose' => false,
    + 'showClose' => true,
    spoiler
    Возможно, ее и вовсе не должно было быть из-за этой настройки, но она добавляется какими-то ассетами.

    Если не поможет, надо будет в инспекторе смотреть или в консоли браузера событие клика повесить и проверить поведение. Возможно, кнопке закрытия достаточно будет указать z-index.
    Ответ написан
  • Как решить проблему Rich Model в DDD?

    vhood
    @vhood
    Не забывайте отмечать решения
    бизнес склонен изменять поведение системы
    Хороший архитектор склонен пересматривать архитектуру

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

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

    vhood
    @vhood
    Не забывайте отмечать решения
    Мне выдает такую ошибку Class "App\Http\Controllers\Post\BaseController" not found

    Ваш контроллер называется BasesController, а не BaseController
    Ответ написан
  • Как сверстать данный блок с последующим адаптивом?

    vhood
    @vhood
    Не забывайте отмечать решения
    Примерно так


    Для адаптива можно сделать несколько вариантов расположения стрелок и переключать их по media запросу
    Ответ написан
    Комментировать
  • Как вывести время в текущем часовом поясе?

    vhood
    @vhood
    Не забывайте отмечать решения
    По коду:
    $datetime создается внутри условия, в else не хватает return, т.к. код дальше требует переменную $datetime, которой нет ($formatter->format($datetime))

    По вопросу:
    Часовой пояс устанавливается так
    $datetime = new DateTime($user_reg);
    + $datetime->setTimezone(new DateTimeZone('Europe/Moscow'));

    Но, скорее всего, в системе нужно установить часовой пояс глобально. Если это так:
    Ответ написан
    5 комментариев
  • Проблема с отображением данных о городах из таблицы в запросе SQL?

    vhood
    @vhood
    Не забывайте отмечать решения
    алиасы нужно указать
    $sql = "SELECT
        o.overhead_code,
        f.name from_name,
        f.comapny from_company,
        f.city from_city,
        f.address from_address,
        f.phone from_phone,
        t.name to_name,
        t.comapny to_company,
        t.city to_city,
        t.address to_address,
        t.phone to_phone,
    FROM overheads o
    JOIN cities f
        ON f.from_city = o.id 
    JOIN cities t
        ON t.to_city = o.id 
    WHERE o.overhead_code = '$trackingNumber'";
    Ответ написан
    Комментировать
  • Как применить nth-child?

    vhood
    @vhood
    Не забывайте отмечать решения
    зачем нужен nth-child, если есть конкретные классы и можно управлять mobile-br, tablet-br, desktop-br и mobile-tablet-br?

    media запросы им поставить и все.

    UPD
    Если все-же нужно:
    /* mobile-br */
    .about__item:last-child > p br:nth-child(1),
    .about__item:last-child > p br:nth-child(3),
    .about__item:last-child > p br:nth-child(6),
    .about__item:last-child > p br:nth-child(7), {
        display: inline;
    }
    
    /* mobile-tablet-br */
    .about__item:last-child > p br:nth-child(2), {
        display: inline;
    }
    
    /* tablet-br */
    .about__item:last-child > p br:nth-child(4), {
        display: inline;
    }
    
    /* desktop-br */
    .about__item:last-child > p br:nth-child(5), {
        display: inline;
    }
    Ответ написан
  • Как выйти из функции js которая вызывает саму себя?

    vhood
    @vhood
    Не забывайте отмечать решения
    пришла мысль выходить из функции если результат положительный

    Так можно выйти из всех функций по очереди.

    let succsessful = false;
    
    function myQuery() {
        if (succsessful) {
            return 'done';
        }
    
        if (/** do smth */) {
            succsessful = true;
        }
        return myQuery();
    }
    Ответ написан
  • Как через foreach прочитать два файла в масив?

    vhood
    @vhood
    Не забывайте отмечать решения
    открывается второй файл и подгружается первый есть есть номер т звоним а если нет ищем другой вариант

    $phones = file("./promotion.dat");
    $users = file("./promotion2.dat");
    
    foreach ($users as $index => $data) {
    	if (!array_key_exists($index, $phones)) {
    		continue;
    	}
    
    	$user = preg_replace('/[^<]*<\|>[^<]*<\|>([^<]+).*/', '\1', $data);
    	$phone = preg_replace('/.*<\|>(\d+)<\|>.*/', '\1', $phones[$index]);
    
    	echo sprintf('%s: %s', $user, $phone);
    	echo PHP_EOL;
    }


    Проверка
    Ответ написан
  • Как реализовать склонения слов после чисел в исходном коде php?

    vhood
    @vhood
    Не забывайте отмечать решения
    Не ломать голову и использовать готовый инструмент

    Пример из README (только на русском):
    echo Carbon::now()->subMinutes(2)->locale('ru_RU')->diffForHumans(); // '2 минуты назад'

    Документация настройки вариантов переводов здесь (можно с запятыми, можно словами без цифр и т.д.)
    Ответ написан
    Комментировать
  • Случайный вывод элементов на php?

    vhood
    @vhood
    Не забывайте отмечать решения
    Можно использовать массив с названиями подключаемых файлов и перемешивать его с помощью shuffle перед выводом.
    Выводить в цикле.
    $files = [
        'file-foo.php',
        'file.php',
        'file2.php',
        'file-bar.php',
        'file3.php',
    ];
    shuffle($files);
    
    foreach  ($files as $file) {
        include ($file);
    }


    Если файлов много, 10 файлов можно подключать, выбрав срез массива имен файлов
    foreach  (array_slice($files, 0, 10) as $file) {
        include ($file);
    }

    Однако операция shuffle для большого массива может быть затратной, по-этому вместо shuffle и array_slice можно воспользоваться array_rand
    - shuffle($files);
    
    - foreach  ($files as $file) {
    + foreach  (array_rand($files, 10) as $file) {
        include ($file);
    }
    Но array_rand не подойдет, если нужно сделать некую пагинацию (выводить первые 10 случайных файлов, затем следующие 10 других случайных файлов и в итоге вывести все файлы в случайном порядке, а затем поменять порядок и снова выводить по 10). Подход с array_slice позволит сделать такую пагинацию.
    Ответ написан
    2 комментария
  • Как добавить файлы из дирректории в папку контейнера с помощью volume?

    vhood
    @vhood
    Не забывайте отмечать решения
    Если директория App не пустая и в нее нужно что-то добавить с помощью volume, то придется указывать volume для каждого такого файла или директории, которую нужно добавить.

    На практике пробрасывают volume на пустые папки или полностю перезатирают.
    Ответ написан
    1 комментарий
  • Как локализовать дату регистрации пользователя wordpress?

    vhood
    @vhood
    Не забывайте отмечать решения
    $datetime = new DateTime($user_reg);
    + $formatter = new IntlDateFormatter('ru_RU');
    + $formatter->setPattern('d MMM, Y');
    
    - echo $datetime->format('F j, Y');
    + echo $formatter->format($datetime);


    Должен быть установлен модуль php-intl
    Ответ написан
    Комментировать
  • Wordpress: как избавится от PHP Notice?

    vhood
    @vhood
    Не забывайте отмечать решения
    prepare - это "подготовить", а "подготавливают" некий шаблон, в который потом пробрасывают значения. "Подготавливать" без значений некорректно.

    - $wpdb->get_var($wpdb->prepare('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"'));
    + $wpdb->get_var('SELECT user_registered FROM '.$wpdb->users.' WHERE ID="'.$id.'"');


    Однако, выглядит это не безопасно (как минимум, $id не типизирован). По-этому лучше пробросить его в prepare

    $wpdb->get_var(
        $wpdb->prepare("SELECT user_registered FROM $wpdb->users WHERE ID=%d", $id)
    );
    Ответ написан
    8 комментариев