Задать вопрос
  • Как пустить элементы по кругу с помощью скролла?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    порядок действий

    1. Сделать 12 элементов.
    2. Расположить элементы по кругу. Тут абсолютное позиционирование В текущих реалиях вечнозеленых браузеров мы можем использовать нативные функции sin() и cos(), чтобы рассчитать, где какие из них должны быть расположены на окружности не покидая мир CSS. Тут никакой магии, геометрия за 7 класс школы.
    3. Естественным образом в расчетах координат появится угол, который можно менять, тем самым поворачивая всю эту карусель. Его можно уже из скриптов менять по той логике, которая нужна для взаимодействия с пользователем.
    4. Обрезать все штатным clip-path.




    Это если говорить про HTML+CSS подход. Он легко делается, но он не идеальный внутри. Есть две проблемы, которые не решатся заменой свойств на другие. Первая - это дергающиеся элементы. В каких-то браузерах это будет проявляться меньше, в каких-то больше. Как ни крути положения элементов округляются до целого количества пикселей по неведомой для нас логике и в движении будут заметны сдвиги в 1px туда-сюда. И производительность - это вторая потенциальная проблема. Двигать много элементов одновременно, особенно если они большие - не всегда хорошо. Не факт, что это будет проблемой в вашем случае, но в теории может стать с учетом всего остального, что будет на странице. Более производительным в теории вариантом будет нарисовать все это на канвасе. Там же можно будет взять под контроль все округления. По крайней мере до какой-то степени. Это следующий шаг, куда можно все это развивать. Логика будет той же самой, но уже на других технологиях. Вероятно вам будет проще начать с варианта на CSS.
    Ответ написан
    5 комментариев
  • На каком движке сделать музыкальный сайт?

    @mezhuev
    Системный администратор
    Странно, что вам не попал в выдачу Subsonic и его форки. Но есть решение лучше — Navidrome — работает быстрее, требует меньше ресурсов и имеет совместимое API, соответственно любое приложение, умеющее работать с Subsonic, будет работать с Navidrome.
    Ответ написан
    Комментировать
  • Что сработает быстрее, что лучше использовать?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Хороший вопрос, хотя и задавался миллион раз.

    Когда у вас выполняется запрос
    SELECT * FROM users WHERE DATE(created_at) = '2024-04-14'
    то СУБД должна пройти весь индекс до конца, получить каждое значение created_at, применить к нему функцию, сравнить с переданным значением, и добавить строку в результат запроса.

    Когда у вас выполняется запрос
    SELECT * FROM users WHERE created_at BETWEEN '2024-04-14 00:00:00' AND '2024-04-14 23:59:59'

    То СУБД находит бинарным поиском первое нужное значение, потом бежит по заранее отсортированному индексу и возвращает все значения до последнего, подходящего под второе условие.
    Ответ написан
    4 комментария
  • Как не записывать в логи Nginx юзеров с юзер агентом yandex?

    karabanov
    @karabanov
    Системный администратор
    map $status:$http_user_agent  $loggable {
        ~^444:                    0;
        ~^[^:]+:.*Yandex.*        0;
        default                   1;
    }
    Ответ написан
    2 комментария
  • Почему на интерфейсе показываются старые массивы, хотя в консоли вижу, что они изменились?

    @MaxRyazan
    судя по скрину у тебя не реактивные переменные, а простые массивы - это раз
    и второе - добавить :key атрибут для цикла v-for
    Ответ написан
    Комментировать
  • Как составить функцию, которая отдала бы вероятность в зависимости от текущего времени?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Соберите вашу функцию из квдаратичных или кубических сплайнов.

    Когда подберете параметры, функция будет вычислятся кусочно. Сначала найдите к какому отрезку относится текущее время (или тупо циклом или набором if-else, или, если сделаете отрезки одинаковым количеством часов, то можно поделить время на длину отрезка и округлить вниз, чтобы получить номер отрезка). Потом вычислите значение нужного сплайна, что будет просто вычислением полинома второй или третьей степени.

    Ну, или можете просто задать нексолько ключевых значений, и проинтерполировать полиномом лагранжа. Правда тут сложно будет заставить его идти именно как вам хочется. Через точки-то он точно пройдет, но вот между ними может иметь какие-то левые пики и изгибы. Так что придется поэксперементировать. Можно поиграться, например, в wolframalpha.com (введите "interpolating polynomial calculator", потом задайте значения функции в точках и получите и график и формулу. Ссылку дать не могу, qna ссылки на wolfram банит за одно со спамерскими ссылками по ошибке).
    Ответ написан
    Комментировать
  • Как сделать так, чтобы отступ между колонками не менялся?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    .grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 30px;
      max-width: calc(300px * 3 + 30px * 2);
      margin: auto;
    }


    Ответ написан
    1 комментарий
  • Как правильно возвращать значение из геттера?

    @Dmtm
    Android
    геттер всегда возвращает ссылку на один и тот же объект, это просто способ доступа к членам класса
    (иначе если в коде два вызова геттера - будет создано два новых объекта?),
    если геттер создает новый объект - это не геттер и его лучше оформить отдельным методом
    в яве даже Cloneable интерфейс ввели чтобы подчеркнуть особый случай
    PS: стоит посмотреть на паттерны Prototype и Factory
    Ответ написан
    Комментировать
  • Как правильно: setTime или new Date?

    tolmasoft
    @tolmasoft Автор вопроса
    Программист, сервис-инженер
    Отвечая на свой же вопрос по производительности - setTime работает на треть быстрее
    Ответ написан
    Комментировать
  • Хэштег для репоста старых постов?

    • blastfromthepast
    • waybackmachine
    • throwback
    Ответ написан
    Комментировать
  • Как на jQuery удалить динамически созданный класс по таймеру?

    Get-Web
    @Get-Web Куратор тега JavaScript
    Front-End Developer
    У function свой this, поэтому передаем либо переменную, которая ссылается на нужный элемент:
    $(".js-answer").click(function() {
        let __this =  $(this);
        __this.addClass("current");
        setTimeout(function() {
            __this.removeClass("current");
        }, 1400);
    });

    Либо используем стрелочную функцию, которая не имеет своего this
    $(".js-answer").click(function() {
        $(this).addClass("current");
        setTimeout(() => {
            $(this).removeClass("current");
        }, 1400);
    });
    Ответ написан
    Комментировать
  • Как получить размер файла используя curl и sftp соединение?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ssh user@example.com ls -l /var/www/image.zip | awk '{ print $5; }'
    Естественно, ssh-подключение должно быть по ключу, а не по паролю.
    Ответ написан
    3 комментария
  • Как правильно возвращать значение из геттера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Полностью зависит от контекста. Здесь нет правильного ответа.
    Можно выделить 2 случая:
    1. Код полностью твой
    2. Код будут использовать другие пользователи

    Если случай 1, то делай как хочешь. Здесь ты главный и знаешь что менять можно, а что нет
    Если случай 2, то тут уже зависит:
    - Если возвращаешь объект, который может (и должен) быть изменен - делай изменяемым
    - Если это слепок состояния - то можно подумать над неизменяемым состоянием
    - Можно прописать это (то что нельзя изменять объект) в документации к методу геттера

    Дополнительно, если тебе так уж нужна неизменяемость, то добавляй интерфейсы. Возвращай какой-нибудь интерфейс с одними геттерами.
    Ответ написан
    Комментировать
  • Как сформировать SQL запрос?

    @MagicMight
    no magic quotes
    Можно сделать джоин с подзапросом
    SELECT <...>
    FROM
      "clients"
      LEFT JOIN "clients_selections" ON "clients"."id" = "clients_selections"."client_id"
      LEFT JOIN (
        SELECT
          "selections"."id",
          "selections"."name",
          "selections"."wishes",
          "selections"."created_at",
          "selections"."updated_at",
          "statuses"."id",
          "statuses"."name",
          COUNT("tours"."id")
        FROM
          "selections"
          INNER JOIN "statuses" ON "selections"."status_id" = "statuses"."id"
          LEFT JOIN "tours" ON "tours"."selection_id" = "selections"."id"
        GROUP BY
          "selections"."id",
          "statuses"."id"
      ) AS "selections_full"
      ON "clients_selections"."id" = "selections_full"."id"
    Ответ написан
    Комментировать
  • Фреймворки для кросс-платформенной разработки. Практикуют ли переписывание под разные платформы?

    DevMan
    @DevMan
    например тот же ксамарин.

    а вообще практика обычна - ядро пилится на одном, гуишки на нативе под платформу.
    Ответ написан
    4 комментария
  • Фреймворки для кросс-платформенной разработки. Практикуют ли переписывание под разные платформы?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Windows Forms - это только Windows, т.к. он построен вокруг нативных системных вызовов Windows. Вообще-то я однажды писал Windows Forms для Linux, но там очень много было костылей и багов, поэтому - нет, не надо.

    Что касается кросс-платформенной разработки на C#.
    Если речь идет про разработку оконных приложений, то тут 2 варианта:
    - Avalonia UI - это кросс-платформенный фреймворк, разрабатываемый сообществом (не майкрософтом), очень похож на WPF. Есть почти все платформы
    - MAUI - это новый кросс-платформенный фреймворк, разрабатываемый майкрософтом. Он довольно новый, поддерживает множество платформ (по странице документации даже Linux (GTK#)). Но он довольно сырой и по отзывам очень много багов
    - WebAssembly/Blazor - фреймворк для создания PWA, веб-приложений, но можно и для мобильных приложений
    Ответ написан
    3 комментария
  • Как определить тяжелые запросы?

    @vitaly_il1
    DevOps Consulting
    Как сказал Akina - включить slow query log.
    Я бы добавил две вещи:
    1) log_min_duration_statement в полсекунды
    2) добавил https://www.postgresql.org/docs/current/auto-expla..., тогда получим explain прямо в логе
    Ответ написан
    3 комментария
  • Как поднять домашний сервер на старом ноутбуке как файлохранилище и сервер майнкрафт?

    @alexalexes
    hp pavillion dv6700, апгрейд:
    1. Вместо HDD ставите SSD Sata 256Гб в отсек HDD.
    2. Вместо DVD покупаете салазки для установки HDD в отсек DVD - бывают 9мм и 12мм высотой, у вас 12мм.
    3. Покупаете 1,5 Тб HDD, например, hgst 5k1500, вставляете его в салазки - получаете максимальный размер диска под файлопомойку. Если хотите другой многотерабайтник, то смотрите, чтобы подходил по толщине - толщина у таких дисков нестандартная.
    4. Покупаете оперативку 2 по 2 Гб DDR2 - получаете 4 Гб максимум для этой железки.
    В такой ноут пойдет только WindowsXP или Windows 7. Windows 10 будет работать со скрипом, возможно, не будет хватать драйверов.
    1. Файлопомойка:
    а) Настраиваете общий сетевой диск (он же SMB, он же samba сервер), по любому руководству, найденному в интернете - получаете общий доступ к диску в пределах локальной сети, до роутера.
    б) Альтернативный вариант. Настраиваете доступ к диску как к ftp каталогу, по любому руководству, найденному в интернете - получаете общий доступ к диску в пределах локальной сети, до роутера.
    2. Майквафт.
    Настраиваете сервер для вашей операционной системы по любому руководству, получаете сервер в пределах локальной сети, до роутера.
    3. Доступ к вашим ресурсам за пределами локальной сети.
    Настраиваете все выше сказанное, еще покупаете учетку dynamicDNS, настаиваете роутер, и получаете доступ к своему компу из внешки.
    Ответ написан
    4 комментария
  • Почему JS код выполняется повторно?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Проблема не в этом коде, очевидно:
    Скорее всего ты просто подключаешь этот код два раза. Проищи внимательнее.
    Ответ написан
    Комментировать