Задать вопрос
  • Как парсить большое количество сайтов?

    @alexalexes
    Помещаете свой массив с 4000 элементами в таблицу базы данных.
    Добавляете еще несколько атрибутов для записи таблицы:
    1. статус обработки парсинга, значения: 1 - добавлен в очередь на обработку, 2 - в обработке, 3 - обработка завершена.
    2. Дата и время изменения статуса обработки.
    Теперь ваш скрипт должен взять запросом из таблицы базы одну запись (один сайт) со статусом 1 (или со статусами 2 или 3, с разницей времени больше периода повторной обработки парсинга) и перевести в статус 2 и начать обработку. По окончании обработки выставить статус 3. При смене статуса обновлять его время изменения.
    Анализировать статус и переводить его в статус 2 нужно одной транзакцией, а в статус 3 - другой транзакцией.
    Если время выполнения персинга с момента старта скрипта небольшое (определяете предельное время работы одного потока и с ним сравниваете), то можно взять следующую запись в работу.

    Все, теперь вы написали простетский планировщик задач и можете параллельно запустить несколько скриптов через браузер или через cron на сервере. Каждый поток выполнения скрипта запросом в базу будет брать задачи, поставленные в обработку, либо перезапускать давно не запускавшиеся задачи, либо перезапускать зависшие в обработке.
    Ответ написан
    Комментировать
  • Есть ли сейчас необходимость в HTML5Shiv и Modernizr?

    Вы должны отталкиваться от того, кем являются ваши пользователи.

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

    Если же это обычные люди, сидящие в интернете, то, скорей всего они используют Chrome или Microsoft Edge. Эти браузеры постоянно обновляются в фоне, и перед внедрением новых фич вам просто нужно периодически заходить на https://caniuse.com/ и ориентироваться на последние 2 версии этих браузеров. Safari может стать проблемой, если ваши пользователи часто покупают Маки. Safari - это, к большому сожалению, новый IE6, который тормозит индустрию...

    Самый лучший способ - это собрать информацию. Если у вас уже есть какой-то сайт для вашей аудитории, то там и собирайте статистику. Исходя из этой статистики принимайте решение. Охватывать все 100% не стоит, лишняя трата времени, денег, нервов. Оно не окупается. Каким процентом пользователей вы можете пренебречь - это всегда индивидуальное решение, но убедить руководство, что такое решение надо принять, всегда надо, потому что вы потом закопаете проект в этой обратной совместимости и потенциальных багах и уязвимостях, идущих с ней в пакете...
    Ответ написан
    6 комментариев
  • Есть ли сейчас необходимость в HTML5Shiv и Modernizr?

    MrDecoy
    @MrDecoy Куратор тега JavaScript
    Верставший фронтендер
    Зависит от требований браузерной поддержки для проекта.
    Ответ написан
    Комментировать
  • Сталкивался кто-нибудь, как переделать из querySelector в querySelectorall?

    @Delta01
    @de1ta01 пиши, помогу с вёрсткой =)
    const sliders = document.querySelectorAll("[data-slider]");
    
    sliders.forEach(slider => {
    	const track = slider.querySelector("[data-slider-track]");
    	const prev = slider.querySelector("[data-slider-prev]");
    	const next = slider.querySelector("[data-slider-next]");
    
    	if (track) {
    
    		prev.addEventListener("click", () => {
    			next.disabled = false;
    			// next.removeAttribute("disabled");
    
    			track.scrollTo({
    				left: track.scrollLeft - track.firstElementChild.offsetWidth,
    				behavior: "smooth"
    			});
    		});
    
    		next.addEventListener("click", () => {
    			prev.disabled = false;
    			// prev.removeAttribute("disabled");
    
    			track.scrollTo({
    				left: track.scrollLeft + track.firstElementChild.offsetWidth,
    				behavior: "smooth"
    			});
    		});
    
    		track.addEventListener("scroll", () => {
    			const trackScrollWidth = track.scrollWidth;
    			const trackOuterWidth = track.clientWidth;
    
    			prev.disabled = false;
    			next.disabled = false;
    			// prev.removeAttribute("disabled");
    			// next.removeAttribute("disabled");
    
    			if (track.scrollLeft <= 0) prev.disabled = true; //prev.setAttribute("disabled", "");
    			if (track.scrollLeft === trackScrollWidth - trackOuterWidth) next.disabled = true; //next.setAttribute("disabled", "");
    		});
    
    	};
    });
    Ответ написан
    2 комментария
  • Как лучше хранить много изображений для веб-приложения?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Хранение файлов в бд - самый хреновый вариант из имеющихся. По многим причинам, но основная - файлы должны лежать в файловой системе. Это их естественное состояние. Это быстро, не затратно, не потребляет лишнюю память/процессор и просто удобно. В зависимости от необходимости давать к ним доступ всем или по авторизации, будет либо работа напрямую с статикой через какой-нить нжинкс, либо программно сформированный поток байт через что-то типа пхпшного readfile...

    В зависимости от возможностей хостинга, файлы хранят либо локально(в случае например собственного выделенного сервера и наличия райд стойки), либо, как уже написали, в облачных хранилищах, что чаще всего достаточно выгодно в плане денег за объем/трафик, плюс расширение хранилища будет просто отражаться на счете за услуги, а не ложиться ответственностью на вас как владельца сгоревших винтов с данными клиента. АПИ у всех весьма несложные, а драйвера для работы с удаленными файлохранилищами есть практически для всех популярных движков в виде готовых пакетов.
    Ответ написан
    3 комментария
  • Как правильно работать с ветками?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Для пет проекта достаточно 2 веток - master и dev:
    - master - работающий код, красивый, причесаный
    - dev - в нем ведется вся работа

    Нет смысла упарываться во всякие git flow, github flow и еже с ними. Над проектом работаешь ТОЛЬКО ТЫ, а значит делать надо как тебе удобнее.
    Думать об этом надо только если над одним проектом работает больше 1 человека.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дружище, data quality у тебя ужасное. Такие данные не должны попадать в реляционную БД.
    Лучше их как-то подчистить и нормализовать. И потом и запрос по подчищенным данным пойдет
    быстрее и индекс можно построить.
    Ответ написан
    Комментировать
  • Почему не работают медиа-запросы в хостинге?

    @Asokr
    Хостинг к html, css и javascript не имеет никакого отношения, всё исполняется у вас в браузере.

    Хостинг и локалка в вашем случае, может иметь отношения к путям до файлов. Проверьте, что они на хостинге верны. Откройте консоль браузера, посмотрите, нет ли ошибок.
    Ответ написан
    2 комментария
  • Совместимость сокета для процессоров Intel Core i?

    @asmelnik
    Можно ли вместо Intel Core i5-1135G7 поставить Intel Core i7-920 ?

    Работать не будет, совсем, даже если физически воткнете.
    Но зависит от цели этого мероприятия.

    Чисто физически, доработав напильником, можно. Но вы, надеюсь, ожидаете хоть какой-то работоспособности, а не просто сделать фото "Я воткнул i7-920 вместо i5-1135G7".

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

    miraage
    @miraage
    Старый прогер
    vscode или webstorm, другие варианты выкиньте.

    vscode - как vim, текстовый редактор, простой. Может превратиться в мощную машину через плагины. Кажется идеальным вариантом в Вашем случае.

    webstorm - мощная машина, "громоздкий" инструмент для профессиональных разработчиков. Умеет почти все, если не все, однако для простой верстки это как стрелять с пушки по воробьям.
    Ответ написан
    1 комментарий
  • В какой программе лучше делать верстку сайта?

    @pantsarny
    WebStorm
    Ответ написан
    Комментировать
  • В какой программе лучше делать верстку сайта?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    Верстать лучше в VS Code, т.к. вы можете накинуть туда много плагинов, которые очень сильно вам могут помочь в этом

    Для дизайна лучше используйте Figma
    Ответ написан
    Комментировать
  • Как убрать пустое место?

    IvanU7n
    @IvanU7n
    nothing interesting here
    никак, такое поведение не предусмотрено для элементов, в которых из-за overflow произошла разбивка на несколько строк
    Ответ написан
    2 комментария
  • Как в базу записывать конфиг настроек settings сайта?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Не сочтите за грубость, но вас из крайности в крайность бросает. То вы не хотели связываться с бд так как это "слишком сложно" и хранили все в файлах, измываясь и над собой и над ребятами которые все это пытались как-то образумить... Сейчас есть большой шаг вперед - вы подружились с бд, но теперь, как в той поговорке - если в руках молоток - все кажется гвоздем... Конфиги из нескольких переменных проще хранить в файле настроек, например в формате JSON. Если уж очень хочется забить шуруп молотком - заведите табличку сеттингс, храните в ней пары ключ-значение, или вообще одну строку с тем же JSON.
    Ответ написан
    2 комментария
  • Как сделать ограничитель поля символов?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Для начала реши как ты будешь отображать числа в которых число разрядов больше чем достуно в калькуляторе для вывода. А потом уже можно заниматься исправлением бага.
    Ответ написан
    Комментировать
  • Допустимо ли двоеточие в значении атрибута data?

    IvanU7n
    @IvanU7n
    nothing interesting here
    можно, data-атрибуты, это просто строка, если что-то перестаёт работать после добавления двоеточия, значит это что-то как-то интерпретирует получаемые значения, но к data-атрибутам это не имеет никакого отношения
    Ответ написан
    1 комментарий
  • Как залить на сервер сайт с бекендом, который написан на php?

    @AndryG
    Я за семь минут сформулировал три разных ответа. Это ж надо так умудриться задать вопрос, что хрен поможешь.

    (я использую MAMP) без него, вместо желаемого результата на странице появляется весь код PHP,
    Ну. конечно будет появляться исходный код, ибо интерпретатора нет и никто исходники не обрабатывает.

    когда подключается PHP код выходит ошибка (не находит страницу)

    Ошибки - это нормально! Нужно найти причину и устранить ее.

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

    0xD34F
    @0xD34F Куратор тега JavaScript
    Засовываем в массив пары из регулярного выражения, с помощью которого из строки достаётся число перед единицей измерения, и эквивалентного данной единице измерения количества секунд; оббегаем этот массив, выдёргиваем числа, умножаем их на количество секунд, складываем:

    const units = [
      [ 'де?н', 24 * 60 * 60 ],
      [  'час',      60 * 60 ],
      [  'мин',           60 ],
      [  'сек',            1 ],
    ].map(n => [ RegExp(`\\d+(?=\\s+${n[0]})`), n[1] ]);
    
    const getSeconds = str =>
      units.reduce((acc, n) => acc + n[0].exec(str) * n[1], 0);

    getSeconds('2 часа 22 секунды') // 7222
    getSeconds('99 минут') // 5940
    getSeconds('1 час 1 минута 1 секунда') // 3661
    getSeconds('1 день 23 часа 59 минут 60 секунд') // 172800
    getSeconds('2 дня') // 172800
    getSeconds('546 секунд и ещё 2 минуты') // 666

    Если вдруг возможно повторение единиц измерения внутри одной строки, то поиск с помощью регулярных выражений должен быть глобальным - RegExp(`\\d+(?=\\s+${n[0]})`, 'g'), а функция подсчёта секунд примет следующий вид:

    const getSeconds = str =>
      units.reduce((seconds, [ reg, multiplier ]) => {
        return [...str.matchAll(reg)].reduce((acc, n) => acc + n * multiplier, seconds);
      }, 0);
    
    // или
    
    const getSeconds = str => units
      .flatMap(n => (str.match(n[0]) ?? []).map(m => m * n[1]))
      .reduce((acc, n) => acc + n, 0);
    
    // или
    
    const getSeconds = str => eval(units
      .map(n => `${n[1]} * (${str.match(n[0])?.join('+') ?? 0})`)
      .join('+')
    );

    getSeconds('1 секунда плюс 3 секунды плюс 5 секунд') // 9
    getSeconds('21 день, 7 дней, да ещё 3 дня - всего секунд в мае месяце будет') // 2678400
    Ответ написан
    2 комментария
  • Какой вариант эндпоинта для получения книг по категории верный?

    nykakdelishki
    @nykakdelishki
    Системный аналитик
    бывает "наиболее правильный"

    1 Вариант
    Этот вариант удачен если вам важно выводит информацию о книжной(!) категории с определенным id

    Например /books/categories/1
    {
       id: 1,
       name: "Роман",
       description: "Такая категория для мечтателей любви",
       _links: {
          self: {
             href: "https://localhost:8080/books/categories/1"
          }
       },.
       etc
    }


    2 Вариант
    Напомню query параметры в RESTful используются только как фильтрация запроса.
    И если цель именно фильтровать все книги по категории => Лучший вариант

    Предположу, что нужен именно он.

    3 Вариант
    Возможен при условии если у книжных(!) категории еще какие нибудь книжки, манга, манхва и тд. Если у вас так берите этот вариант

    4 Вариант
    Этот вариант лучшие если у вас есть общие категории, например "Фантастика". А фантастика может быть книги, кино, сериалы и тд.

    П.С. Для соответствия RESTful важен не только путь но и то какой у тебя ответ
    П.С.2 Надеюсь мной не воспользовались через "закон Каннингема"
    Ответ написан
    Комментировать
  • Как организовать подобную задачу правильно?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Лучше всего добавить поле в админ панель чтобы оно сохранялось в базу данных (или просто поле в базе). На фронте проверять, если есть короткое то выводим его если нет то обычное. А пример кода это просто ад, как заплатка на коленке может и сойдет но это не решение задачи.
    Ответ написан
    Комментировать