• Как переделать изображения в SVG?

    @thedexploit
    Сайтами маюсь
    Оптимально будет использовать Webp форматом, чего и требует тот же гугл для оптимизации. Вес на много ниже, потерь в качестве практически нет.
    Ответ написан
    Комментировать
  • Как переделать изображения в SVG?

    zahmTOD
    @zahmTOD
    Графический дизайнер
    По идее — никак. Это разные сущности. SVG - Scalable Vector Graphics. Т.е. векторная графика. А у вас в наличии JPG и PNG, которая растровая графика.
    Технически вы можете вставить растр в svg-файл, но практически «вес» картинок это не уменьшит.
    Ответ написан
    Комментировать
  • Как понять, когда вызывать свой сниппет кешированным, а когда - некешированным?

    an-tar
    @an-tar Куратор тега MODX
    Full stack web developer
    pdoResources каждый раз возвращает новый результат.

    я бы сказал, что при прочих равных скорее и чаще он возвращает именно один и тот же результат, потому и может быть кешированным. Ну или крайне желательно по известной причине - экономии ресурса.
    Или другой пример из коллекции pdoTools - pdoMenu. Меню может быть сложным(например, а-ля megamenu), но меняться крайне редко(сделали раз структуру сайта и пользуетесь), поэтому очевидно иметь его кешированным крайне выгодно. Если же что-то в структуре(или самих ресурсах) поменяется, MODX сам перекеширует вызов.
    Или еще пример pdoSitemap - карта сайта если и меняется, то не часто, а также может требовать значительных ресурсов для генерации, посему вызов здесь нужен кешированный, но если что-то изменится в структуре, ядро позаботится об этом.

    Кешированные же нужны там, где каждый раз новые данные - ajax запросы/ответы, постраничный вывод, либо же несколько похожих вызовов на странице или такая вложенность вызова, что из-за внутреннего некешированного внешний тоже не будет кешироваться...и в итоге оба некешированные....отсюда AjaxForm, pdoPage и т.д.

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

    Это был ваш капитан))
    Ответ написан
    Комментировать
  • Какой паттерн использовать для задачи получение заказов, отправка статусов заказов из нескольких разных внешних источников?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Начинаем с границ
    Очерчиваем границы нашей системы, как-будто у нас есть этот "идеальный заказ".
    Это будут интерфейсы некоторых абстрактных реквестов и респонсов.
    Реквест на обновление, добавление и респонс на получение и т.д.... И несколько ДТО их реализующие или которые и будут этим интерфейсом сами по себе.

    Далее вы строите клиент OrderClientInterface, который выше созданные реквесты отправляет, респонсы возвращает. И на его интерфейс вы завязываетесь. Строите поверх него фабрику, которая построит вам нужный клиент под нужную систему :)

    Адаптеры (к слову это и паттерн одноименный)
    Клиенты-адаптеры уже будут связывать АПИ внешних систем с интерфейсом вашего абстрактного (имеется в виду интерфейс) клиента. Через guzzle, или через некий свой sdk, уже для вашего домена не важно, дело техники. С авторизацией или без нее... Это детали клиента.

    Это довольно общая рекомендация, но стоящая и очень упростит вам работу. Несколько интерфейсов, несколько дто, фабрика и остальное дело техники, просто и надежно

    Бизнес-логика
    Теперь пишите хэндлеры в вашей бизнес-логикек: из контроллера, демона, команды вызываете нужные хэндлеры и строите запросы. Саму обработку их результата и контроль состояния делаете в сущностях.
    Ну я так понимаю, вопрос касался адаптеров.
    Ответ написан
    Комментировать
  • Как удалить файлы старше n дней с доп. условием?

    @Olgeir
    Пребираешь в цикле все каталоги для каждого получаешь командой dir /ad /tc дату создания каталога. Далее используя https://ss64.com/nt/syntax-datemath.html вычисляешь сколько времени прошло с момента создлания каталога и принимаешь решение удалять или нет.
    Ответ написан
    Комментировать
  • Как сделать запрос на одинаковые значения столбца?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пишешь в адресной стороке своего браузера: найти повторяющиеся значения в бд
    Если хочется получить ответ именно от пользователей тостера то добавляешь site:qna.habr.com
    Ответ написан
    Комментировать
  • Как правильно перенаправлять на мобильную версию?

    @granty
    Есть 3 Способа адаптации сайта для мобильных устройств:
    1. Адаптивный дизайн
    2. Динамический показ
    3. Разные URL

    Первые два не требуют перенаправления на мобильную версию. Третий - требует.

    Какой способ из трёх лучше - тема холливарная, поэтому я ограничусь ссылками на Хабр:
    Сравнение методов создания мобильных версий сайтов
    Делать ли мобильную версию? 5 распространенных про...

    И на рекомендации поисковых систем как делать мобильные версии сайта и правильное перенаправление на мобильную версию:
    Индексирование Яндексом мобильной версии сайта на ...
    Сайты для мобильных устройств, рекомендации Яндекса
    Рекомендации Google если мобильная/декстопная верс...

    Если коротко - Гугль для 3-го способа рекомендует прописывать теги:
    На странице для компьютеров (http:// www.example.com/page-1) добавьте следующий код:
    <link rel="alternate" media="only screen and (max-width: 640px)"
     href="http://m.example.com/page-1">

    На мобильной странице (http:// m.example.com/page-1) аннотация должна быть такой:
    <link rel="canonical" href="http://www.example.com/page-1">


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

    @nvdfxx
    Senior Pomidor developer
    "Влияние переноса строки на результаты в выдаче" - звучит, как seo головного мозга.
    Ответ написан
    8 комментариев
  • Как правильно реализовать ООП python?

    tumbler
    @tumbler Куратор тега Python
    бекенд-разработчик на python
    Тут нет ООП. Набор функций (привет, процедурное программирование) зачем-то сгруппирован в класс, у которого инстанцируется единственный экземпляр.
    Ответ написан
    8 комментариев
  • Как правильно реализовать ООП python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import telebot
    import requests
    import pprint
    import time
    
    botToken = "token"
    chanelName = "@wo"
    
    class Bot:
      def __init__(self,nameChanel,token):
        # todo: проверьте pep8: форматирование (пробелы, indent=4), нейминг (CamelCase vs snake_case)
        self.name = nameChanel
        self.bot = telebot.TeleBot(token)
        # todo: Неадекватное имя bot. Вызывает путаницу в связи с именем класса Bot
        #self.source = source
    
      def getIDGroup(self,str):
        # todo: str - это встроенный тип, по смыслу должно быть ясно, что можно итерировать
        arr = []
        # todo: Неадекватное имя arr. Имя должно указывать не на тип, а на суть того, что поименовано.
        for nameGroup in str:
          url = f"url"  # todo: Зачем тут форматная строка, если нет переменных? Видимо ошибка.
          response = requests.get(url).json()['response']['object_id']
          # todo: Где проверка ответа на ошибки?
          # todo: Неадекватное имя. Назовите object_id
          arr.extend(self._getPostsGroup(response))
        return self._editPosts(arr)
    
      def _getPostsGroup(self,number):
        # todo: Неадекватное имя number. Назовите group_id 
        number = str(number)
        url = f"url"
        response = requests.get(url).json()['response']['items']
        # todo: Неадекватное имя. Назовите object_id
        return response
    
      def _editPosts(self,posts):
        with open('id.txt','r') as file:
          list = file.read().split()
          # todo: имя переменной перекрывает встроенный тип, не отражает содержимое
          # todo: Зачем read и split, если можно list(file) и идентификаторы хранить в строках?
          file.close()
          # todo: Зачем close, если with?!
        
        for item in posts:
          count = list.count(str(item['id']))
          # todo: Зачем вам тут count, если нужна лишь проверка на вхождение?
          if count:
            continue
          photo = ""
          # todo: почему не None?
          for img in item['attachments'][0]['photo']['sizes']:
            if img['height'] > 300:
              photo = img['url']
              break
          text = item['text']
    
          self._sendMessageBot(text,photo)
          with open('id.txt','a') as file:
            # todo: ну использовали бы уже хотя бы shelve
            file.write(str(item['id'])+' ')
            file.close()
            # todo: опять close
    
    
      def _sendMessageBot(self,text,photo):
        if photo:
          if text:
            self.bot.send_photo(self.name,photo,caption=text)
            return
          else:
            self.bot.send_photo(self.name,photo)
        if text:
          self.bot.send_message(self.name,text)
    
        # Функция могла выглядеть так:
        # if photo:
        #   self.bot.send_photo(self.name, photo, caption=text)
        # elif text:
        #   self.bot.send_message(self.name, text)
        # Но лучше не допускать вызова с пустыми аргументами. Это бессмысленно и плохо
    
    bot = Bot(chanelName, botToken)
    # вот как понимать такое: bot.bot? Нейминг!!!
    posts = bot.getIDGroup() #name of group

    Зачем каждый раз читать и писать файл, когда у вас бот в памяти остаётся?
    По меньшей мере вы можете хотя бы не читать каждый раз, сохраняя идентификаторы в множестве памяти (кэш), а загружать это множество из файла только при старте бота. Писать можно и так. Но у вас функции не соответствуют принципу single responsibility (почитайте SOLID)

    Всё плохо. Прежде чем думать об ООП почитайте хотя бы туториал по питону или любую книжку Питон для чайников.
    Хороший тон давать код на ревью в гитхабе. Там можно удобно, с подсветкой синтаксиса и нумерацией строк прокомментировать весь ваш ... код, а вы сможете его потом итеративно улучшать и мне не придётся заново убеждаться, что вы учли все замеченные проблемы при повторном ревью.
    Вот бесит прям. Пожалуй не буду больше ревьюить первые потуги настолько самоуверенных программистов. Просто не вежливо дёргать сообщество не почитав даже основы.
    Ответ написан
    3 комментария
  • Зачем учить сети?

    mahmudchon
    @mahmudchon
    Какие плюсы есть в изучении компьютерных сетей?

    Имхо, не вижу плюсов в изучении чего-либо без понимания зачем это нужно.
    Ответ написан
    1 комментарий
  • Лучшие практики или скорость в вёрстке?

    @Lord_Dantes
    Сейчас изучил вёрстку

    Не изучили.

    уделять всему внимание и гордиться качеством
    Ответ написан
    Комментировать
  • Хочу заниматься веб-разработкой, с чего начать?

    daemonhk
    @daemonhk
    ПсиХоПат
    Мой вам совет - оно того не стоит. И дело не в быстро меняющихся трендах, постоянных холиварах и срачах, и не в том, что веб-макак как грязи, и не в том, что вы часто будете читать как некий Васян работает на ГОА раз в неделю и гребет бабки лопатой...

    Просто... Ваш труд никому не нужен. Да, да, именно так все обстоит с 99% всех работ всех веб-разработчиков. Через пару лет меняется дизайн и пилится новый сайт. Через пару лет гугл придумает новую хрень, отчего сайты, которые раньше получали по 90+ баллов оптимизации теперь едва наскребут 75. Через пару лет прибудет новый эшелон веб-макак, более дешевых чем вы.

    О вас никто не узнает, никто не скажет вам спасибо, о вас не напишут в википедии, не снимут видеорепортаж. Задумайтесь, а нужна ли вам эта гонка в беличьем колесе?
    Ответ написан
    2 комментария
  • Хочу заниматься веб-разработкой, с чего начать?

    GrenadinGran
    @GrenadinGran
    Помог ответ - отметь решением
    1. Научиться пользоваться гуглом
    2. Понять, что на эту тему уже заданы сотни вопросов и написаны тысячи ответов
    3. Проанализировать их
    ...
    PROFIT
    Ответ написан
    1 комментарий
  • Стоит ли идти во frontend или ниша насыщенна?

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

    куда.
    книги лучше читайте

    Я услышал и увидел, что во фронтенде сейчас огромная конкуренция и в этой сфере

    в любой сфере огромная конкуренция.

    стоит ли идти во фронтенд

    хотите - идите, хотите - нет.
    Ответ написан
    Комментировать
  • Стоит ли идти во frontend или ниша насыщенна?

    AngryYumy
    @AngryYumy
    Заплати фрилансеру чеканой монетой
    Стоит ли идти во "вставить любое направление" или ниша насыщенна?

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

    DevMan
    @DevMan
    ниша насыщенна. как и многие другие.
    проблема только в том, что желающих охулиард, а грамотных (или с задатками) совсем не хватает.
    кем из этих двух категорий вы станете, зависит только от вас.

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

    но скоро прибежит зумингер и объяснит (по его разумению), что вы, мягко выражаясь, не человек.
    Ответ написан
    6 комментариев
  • Почему файл не существует?

    Compolomus
    @Compolomus Куратор тега PHP
    Комполом-быдлокодер
    Потому что он на удалённом сервере
    Можно проверить заголовок
    https://stackoverflow.com/questions/7684771/how-to...
    Один из вариантов, но можно одной функцией
    https://www.php.net/manual/ru/function.get-headers.php
    Ответ написан
    7 комментариев
  • Существует ли в PHPStorm плагин генерации CSS из HTML?

    daemonhk
    @daemonhk
    ПсиХоПат
    Данный вопрос уже задавался и имеет ответ на Тостере - Есть ли плагин для генерации css-селекторов на основании html?
    Если вкратце - в шторме пока такого нет.
    Ответ написан