• Что означает ветвимся, и отправляем merge-request?

    Tomio
    @Tomio
    backend developer (python, php)
    Если вы работаете один, то можете локально сделать merge ветки name1 в master, а затем сделать push ветки master.
    Ответ написан
    Комментировать
  • Почему вакансий под разработку на WordPress гораздо меньше, чем под front-end фреймворки?

    Tomio
    @Tomio
    backend developer (python, php)
    Вы пытаетесь сравнить тёплое с мягким.
    Вакансий только на WP вы почти не найдёте, ибо с WP имеют дело в основном лишь web-студии. Но у них в арсенале кроме WP есть еще ряд других CMS: Bitrix, Joomla, OpenCart, Drupal, NetCat и пр. Поэтому, устроившись в студию, вам придется работать со всеми этими CMS, и знание лишь одного WP вас не спасёт.
    WP не нужен для постоянной поддержки. Вы один раз настроили его, запрогали всё, что нужно, и оно работает. На этом бэкенд закончился. Плюс на WP практически не делают сложных проектов. Всё-таки это изначально позиционировалось как движок для блогов.
    Другое дело фронтенд (и тот же Vue), где интерфейс и дизайн может меняться оооочень часто. Потому как это то, что видят пользователи вашего приложения. Бэкенд они не видят, они даже не знают, что у вас WP. Они видят фронт: все эти анимашки, скроллы, слайдеры, красивые формы. И в этом универсальность фронтендеров. Имея в арсенале только Vue, они могут работать и с сайтом-визиткой, и с интернет-магазином, и с банком, и с биржей, и с социальной сетью, и с чем угодно.

    Так что ответ прост - всё дело в универсальности.
    Ответ написан
    Комментировать
  • Как выполнять функцию PHP раз в 3 секунды?

    Tomio
    @Tomio
    backend developer (python, php)
    Если вам надо каждые 3 секунды слать запрос, то тут самый оптимальный вариант будет такой:
    1. Устанавливаете supervisord, настраиваете его конфиг и настраиваете конфиг запускаемого php скрипта (в этом нет ничего сложного, инструкции в интернете имеются)
    2. Сам php скрипт у вас будет состоять из бесконечного цикла while, в начале которого у вас будет задержка в 3 секунды:
    while (true){
        sleep(3);
        // do some cool (or not) stuff
    }

    3. Запускаете супервизор и дело в шляпе)

    В чём плюс такого подхода:
    1. Цикл while (true) никогда не закончится и будет выполнять ваш код каждые N-секунд.
    2. Супервизор демонизирует ваш скрипт, и он, по сути, становится сервисом, а не просто php скриптом
    3. В конфиге супервизора для вашего скрипта можно указать параметр autorestart=true, и в случае, если скрипт упадет, супервизор его перезапустит без вашего участия (вдруг хост, куда вы по апи стучитесь, упадет на какое-то время)
    Ответ написан
    1 комментарий
  • Как выполнять обработку запросов получаемых API?

    Tomio
    @Tomio
    backend developer (python, php)
    Попробуйте переделать под более привычную реализацию, с роутером, правилами, параметрами и единым диспетчером, который будет в зависимости от апи-эндпоинта вызывать тот или иной метод или функцию.
    Посмотрите в сторону FastAPI
    Ответ написан
    Комментировать
  • Возможно-ли сделать следующее?

    Tomio
    @Tomio
    backend developer (python, php)
    Так можно же восстановить сайт из бэкапа с помощью restore.php
    Ответ написан
  • Почему %Y-%m-%dT%H:%M:%S не учитывает разделитель T?

    Tomio
    @Tomio
    backend developer (python, php)
    Попробуйте преобразовать объект даты в строковое представление:
    data['date_time'] = pd.to_datetime(data['date_time']).strftime('%Y-%m-%dT%H:%M:%S')
    Ответ написан
    Комментировать
  • Почему все элементы списка, ссылаются на последнее добавление?

    Tomio
    @Tomio
    backend developer (python, php)
    Потому что так работает питон)
    hYwYJqY.png
    Список у вас содержит один и тот же объект - self.office_equipment, который вы постоянно обновляете через update.
    Список может содержать "бесконечное" количество ссылок на неуникальные объекты. В ваше случае каждый раз в списке создается ссылка на один и тот же объект - self.office_equipment.
    Вам нужно написать вот так, чтобы всё работало как вы планировали:
    self.store.append(temp_value)
    Ответ написан
    Комментировать
  • Не понимаю суть self в python, кто может объяснить?

    Tomio
    @Tomio
    backend developer (python, php)
    self указывает на текущий экземпляр класса.
    То есть, например, есть класс Человек, которому при создании можно указать имя и возраст. Можно создать двоих людей и у каждого внутри своего класса будет свой self. Self нам позволяет обратиться к атрибутам и методам конкретного экземпляра класса.
    class Human(object):
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    old_man = Human('Vasilich', 88)
    young_man = Human('Petya', 6)
    print(old_man.name, old_man.age)
    print(young_man.name, young_man.age)
    >>> 'Vasilich', 88
    >>> 'Petya', 6


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

    Tomio
    @Tomio
    backend developer (python, php)
    Самое оптимальное вам посоветовали - это база данных с созданными индексами по колонкам, в которых вы будете искать. Быстрее способа что-то найти вы не найдете.
    Ну раз упомянули базу данных, посоветую вам еще библиотеку pandas - это прям вообще мощный монстр, который сможет вам очень сильно упростить процедуру поиска данных в таблице. Просто скармливаете пандасу ваш csv файл и гуглите нужные методы для ваших целей) ибо у него их полно.
    Ответ написан
    Комментировать
  • Почему метод strptime из модуля datetime добавляет год, месяц и день, если в форматируемой строке их нет?

    Tomio
    @Tomio
    backend developer (python, php)
    Вы используете объект "даты-время", что подразумевает, что у вас на выходе должна быть дата и должно быть время. А так как во входных данных у вас даты не обнаружено, то подставляется дата по умолчанию.
    Чтобы вернуть объект времени вам нужно его извлечь из даты-времени:
    print(datetime.strptime('23:14:44', '%H:%M:%S').time())
    Ответ написан
    Комментировать
  • Как клонировать проект сразу с гитом?

    Tomio
    @Tomio
    backend developer (python, php)
    Если он вместе со всеми файлами проекта с фтп подтянет папку .git, то работать он с проектом сможет через репозиторий. Естественно, у него в системе должен быть установлен Git. Плюс к этому, ему нужно будет проверить origin. Если он прописан через https, тогда ему придется вводить каждый раз логин и пароль. Если там прописан ssh, тогда нужно будет позаботиться о связке SSH ключей локального репозитория и удаленного.
    Ответ написан
  • Как получить разницу двух дат в месяцах?

    Tomio
    @Tomio
    backend developer (python, php)
    Используйте библиотеку Carbon:
    $this_month = Carbon::parse('2019-07-05')->floorMonth(); // returns 2019-07-01
    $start_month = Carbon::parse('2019-06-30')->floorMonth(); // returns 2019-06-01
    $diff = $start_month->diffInMonths($this_month);  // returns 1
    Ответ написан
    Комментировать
  • Почему $total не меняется?

    Tomio
    @Tomio
    backend developer (python, php)
    Вероятно у вас идет сравнение числа со строкой. Приводите принудительно сравниваемые переменные к одному типу:
    (int)$row['w_site'] === 1
    (int)$row['ban_type'] === 1
    и далее также по аналогии.
    Плюс у вас цикл while будет возвращать всегда одно и то же значение. Потому как сохранится присваивание $total из последней итерации
    Ответ написан
  • Почему деактивируются пользователи битрикс?

    Tomio
    @Tomio
    backend developer (python, php)
    Попробуйте отловить событие изменения пользователя и уже от этого пляшите. Вот два события на этот счёт:
    OnBeforeUserUpdate
    OnAfterUserUpdate
    Ответ написан
    Комментировать
  • Как бороться c memory leaks в pods на кластере Kubernetes?

    Tomio
    @Tomio
    backend developer (python, php)
    Ммм, а разве ограничение ресурсов памяти не помогает в этом?
    resources:
      limits:
        memory: "1024Mi"
    Ответ написан
    1 комментарий
  • Что значат volumes в конце docker-compose.yml?

    Tomio
    @Tomio
    backend developer (python, php)
    Блок volumes, определенный на первом уровне yaml файла (перед servies или после, это не важно) предназначен для указания общих для всех сервисов областей монтирования хранилищ.

    У вас указано:
    volumes:
      static_volume:

    Это значит, что у вас локально на диске будет создано хранилище для данных. А конкретно вот тут:
    /var/lib/docker/volumes/static_volume/_data
    И его смогут использовать те сервисы, которым вы его укажете.
    Ответ написан
    Комментировать
  • Не является внутренней командой?

    Tomio
    @Tomio
    backend developer (python, php)
    Вы в виртуальном окружении пробовали сделать то же самое? Если нет, то рекомендую всегда под проекты использовать виртуальное окружение, благо у питона это встроенная фича.
    Тут база - https://docs.python.org/3/library/venv.html
    Тут как активировать его в windows - https://tyapk.ru/blog/post/python-virtual-environm...
    Ответ написан
    3 комментария
  • Как вытянуть цвет из строки через PHP?

    Tomio
    @Tomio
    backend developer (python, php)
    $pattern = '~.*\d+\/?\d? (.*) \(.*~';
    $string = '3924 Ламінат Parfe Floor 7/32 Дуб Мірандо (2,663)/10шт';
    preg_match_all($pattern, $string, $matches);
    $color = $matches[1][0];
    
    echo $color;
    >>> Дуб Мірандо


    Если у вас все записи будут в таком же виде, то данная регулярка вытащит вам цвет.
    Ответ написан
    1 комментарий
  • Как избежать ошибки local variable referenced before assignment?

    Tomio
    @Tomio
    backend developer (python, php)
    У вас
    class Battery():
        """Простая модель аккумулятора электромобиля."""
        def __init__(self, battery_size=60):

    Вы сравниваете
    def get_range(self):
            """Выводит приблизительный запас хода для аккумулятора."""
            if self.battery_size == 70:
                range = 240
            elif self.battery_size == 85:
                range = 270
    
            message = "This car can go approximately " + str(range)
            print(message)

    Вам надо либо обработать значение 60 и присвоить range, либо сделать общий else в методе get_range.
    Ответ написан
    Комментировать