• Как реализованы анимации при скролле на сайте?

    @YahorDanchanka
    Frontend developer
    Вот пример подобной анимации, меняется одна css переменная, от которой все отталкивается.


    Из ответа
    Ответ написан
    Комментировать
  • Как сделать умножение в Select?

    egor_nullptr
    @egor_nullptr
    select *, price * (73 - (72 * valuta)) as price_in_rub
    from ...
    where ...
    Ответ написан
    4 комментария
  • Как узнать последнюю цифру числа?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Для целых чисел все просто, как уже верно заметил Stalker_RED достаточно взять остаток от деления на 10n % 10
    Но вот с дробными числами все намного интереснее. Потенциально, можно получить целое представление последовательно умножая число на 10 (сдвигая тем самым десятичную точку вправо), а после воспользоваться предыдущим приемом. Но проблема тут в том, что потенциально такая последовательность может оказаться бесконечной и такой алгоритм зациклится.
    Если обратится к стандарту IEEE 754, то можно узнать, что в 64 битах можно точно представить не более 16 десятичных разрядов, а это уже можно использовать как ограничитель, так как при превышении 16 сдвигов десятичной точки значение все равно уже не будет точным
    const lastDigit = n => {
        // в n совсем не то
        if (isNaN(n) || !isFinite(n)) return NaN;
        // в n целое
        if (n % 1 === 0) return n % 10;
        // для дробных проще со строкой работать
        const s = String(Math.abs(n));
        // неточные значения
        if (s.length > 16 || s.includes('e')) return NaN;
        return +s.slice(-1);
    }
    Ответ написан
    Комментировать
  • Как узнать последнюю цифру числа?

    Stalker_RED
    @Stalker_RED
    Последняя цифра - это остаток при делении на 10.
    const lastDigit = 765 % 10; // -> 5
    Ответ написан
    5 комментариев
  • Как засунуть переменные из include файла в класс?

    @kot999
    Backend software engineer
    тут изначально очень не правильный подход. не нужно делать "дефолтную конфигурацию" через глобальные переменные.
    class DbConnection
    {
        private string $userName;
        private string $password;
        private string $dbname;
    
        public function __construct(string $userName, string $password, string $dbName)
        {
            $this->userName = $userName;
            $this->password = $password;
            $this->dbname = $dbName;
        }
    }
    
    
    class AuthController
    {
        private DbConnection $dbConnection;
    
        public function __construct(DbConnection $connection)
        {
            $this->dbConnection = $connection;
        }
    }
    
    $dbSettings = include('dbconfig.php');
    $connection = new DbConnection($dbSettings['login'], $dbSettings['password'], $dbSettings['dbName'] );
    $controller = new AuthController($connection);


    а в файле dbconfig.php

    return [
    'login'=>'myLogin',
    'password'=>'myPassword',
    'dbName'=>'myDbName'
    ];
    Ответ написан
    3 комментария
  • Как сделать похожую карту на сайте?

    aagzip
    @aagzip
    Воспользуйтесь данной библиотекой.

    https://github.com/StephanWagner/svgMap
    https://www.npmjs.com/package/svgmap

    Либо сделайте по аналогии.
    Ответ написан
    1 комментарий
  • Можно ли на JS автоматически воспроизвести аудио-файл при загрузке страницы?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Не можно. И это хорошо.
    Ответ написан
    Комментировать
  • Как запускать данную команду без скрипта?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Вызываем справку:
    docker run --rm -v ${PWD}/:/var/task -u 0 node:15-alpine sh --help
    BusyBox v1.31.1 () multi-call binary.
    
    Usage: sh [-/+OPTIONS] [-/+o OPT]... [-c 'SCRIPT' [ARG0 [ARGS]] / FILE [ARGS] / -s [ARGS]]
    
    Unix shell interpreter


    Таким образом:
    docker run --rm -v ${PWD}/:/var/task -u 0 node:15-alpine sh -c "cd /var/task && npm install && npm ci"


    А можно и так:
    docker run --rm -v ${PWD}/:/var/task -u 0 --workdir="/var/task" node:15-alpine sh -c "npm install && npm ci


    Или вообще так:
    docker run --rm -v ${PWD}/:/var/task -u 0 --workdir="/var/task" node:15-alpine npm install && npm ci


    PS
    https://docs.docker.com/engine/reference/run/
    Ответ написан
    2 комментария
  • Как убрать прокрутку вверх при сворачивании подменю?

    @saver116
    front-end developer
    Добрый день, можете просто добавить еще один знак # к тегу a
    вот так
    <a href="##">
    тогда не будет слетать вверх
    Ответ написан
    1 комментарий
  • Как сгруппировать массив?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Классическое решение - пробежаться циклом по массиву:

    <?php
    $query = "select * from equipment";
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $equipments = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    $result = array_reduce(
    	$equipments,
    	function($res, $el) {
    		if(!is_array($res[$el["equipment_id"]])) {
    			$res[$el["equipment_id"]] = [
    				"equipment_id" => 141491,
    				"speed" => []
    			];
    		}
    		array_push(
    			$res[$el["equipment_id"]]["speed"], 
    			[
    			    "datetime" => $el["datetime"],
                	"value" => $el["speed"],
                	"distance" => $el["distance"],
    			]
    		);
    		return $res;
    	},
    	[]
    );
    
    var_export(array_values($result));


    Run PHP and SQL online

    SQL решение:
    <?php
    $query = "select 
    	equipment_id, 
    	json_arrayagg(
    		json_object(
    		  'datetime', `datetime`,
    		  'value', `speed`,
    		  'distance', `distance`
    		)
    	) speed
    from equipment
    group by equipment_id;";
    
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $equipments = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    
    var_export($equipments);


    Test code here
    Ответ написан
    1 комментарий
  • Как сделать адаптивный логотип из длинного текста в короткий или в картинку CSS?

    Aetae
    @Aetae
    Тлен
    Есть много способов, но мне нравится вот такой трюк.
    Ответ написан
    Комментировать
  • Как обратится к псевдониму имени класса используя переменную?

    Я тебя расстрою парень. Для динамического формирования нельзя использовать пространство имён Прийдется писать полный путь ручкми.
    https://www.php.net/manual/ru/language.namespaces....
    Ответ написан
    3 комментария
  • Как сделать такой элемент при наведений?

    Neobezatelno
    @Neobezatelno
    Дюшес
    Ответ написан
    Комментировать
  • Как правильно писать catch в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для того чтобы правильно писать catch, надо писать осмысленный код.

    А здесь мы наблюдаем очаровательный пример карго-культа.
    Узнав, что "толстый контроллер - это плохо, а сервисы - это хорошо", автор небрежным движением руки замел весь мусор под ковёр перенёс весь код из контроллера в "сервис". Ну а что? Контроллер худой, весь код в сервисе!
    Тот факт, что сама кривая структура проекта осталась, по сути, той же самой, нас не смущает.
    Как и то, что сервис вдруг начал выполнять функции НТТР контроллера и кидать почему-то НТТР исключения. Что с этими исключениями делать в случае, если тот же сервис будет вызван из консольной команды - загадка.

    Но самое забавное, что при всём при этом контроллер всё равно пытается выполнять работу модели. Казалось бы, какое отношение интерфейс для обслуживания НТТР запросов имеет к транзакциям в базе данных? А вот поди ж ты!

    Чтобы сделать этот код осмысленным, контроллеру всё-таки придется потрудиться, и выполнить какую-то работу самому, а не перекладывать на "сервис". А так же отдать модели то что ей принадлежит.

    В общем транзакцию перекинуть в createDefault. причём не напрямую, а ещё ниже - в слой для работы с БД. Стартовать транзакцию до валидации данных - это как бы *не совсем логично*, мягко говоря. И в итоге, как по волшебству, весь этот говнокод исчезнет как страшный сон.
    При этом в параметрах передавать не НТТР реквест чохом, а осмысленный набор параметров, вынутый предварительно из реквеста!
    В частности, если модель сама проверяет права доступа, то и передавать ид пользователя из авторизации.

    При этом модель не должна кидать НТТР исключения. Она должна кидать исключения бизнес-логики. Которые контроллер уже может ловить и транслировать в хттп. Но тут видимо уже сложнее, поскольку это ж ларавель судя по всему.

    В любом случае, уж catch (Exception $e)-у тут точно не место

    Но это если рассматривать твой конкретный случай.
    В общем же случае правильный код написал Илья.

    То есть внутри трая операции с БД и коммит.
    в кетче роллбэк и перевыброс исключения. Только ловить надо Throwable

    try {
      DB::beginTransaction();
      // запись в БД
      // запись в БД
      // запись в БД
      DB::commit();
    } catch (\Throwable $e) {
      DB::rollBack();
      throw $e;
    }
    Ответ написан
    2 комментария
  • На что проверять строку, введенную со стороны пользователя на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это хороший вопрос, который довольно часто задают новички, поскольку они все поголовно подвержены очень распространенному заблуждению - что опасность заключается в самих данных, и их, следовательно, можно как-то "обезопасить". Что "данные" в приложении - это некий универсальный абстрактный объект, который можно универсально же обработать.

    Но если подумать, то ответ становится очевидным: не бывает таких "проверок", которые автоматически делают данные "безопасными".
    Поиск таких универсальных проверок - это такая же глупость, как поиск "базовых правил безопасности для человека". Ты встречал кого-нибудь, кто все время носит каску, наколенники, бронежилет и презерватив? Независимо от того, собрался он кататься на роликах, на войну, или на свидание?

    Данные не бывают "опасными" или "безопасными" сами по себе.
    Всё зависит от контекста.
    А любая обработка "просто на всякий случай" тупо испортит данные.
    К примеру твоя strip_tags() изуродует математический текст, в котором встречаются символы "больше" и "меньше".

    Поэтому и надо форматировать данные перед использованием, в зависимости от конкретного контекста, а не заранее. Используем в SQL? Применяем подготовленные выражения. Используем в HTML? Применяем htmlscpecialchars. Используем в URL? Применяем urlencode. Используем в яваскрипте? Применяем json_encode. И так далее. Тебе уже самому должно быть смешно, глядя на этот набор "базовых проверок", если их накатывать все скопом.

    Плюс не надо путать форматирование данных и их валидацию.
    Валидация, в принципе, хорошая вещь, но надо понимать что во-первых, она не имеет никакого отношения к безопасности, и не может заменить контекстное форматирование данных, а во-вторых, уж тем более не может быть "универсальной" по определению.
    Ответ написан
    5 комментариев
  • Как передать папку большого объема через windows по интернету?

    @unseriously
    Торрент
    Создаете торрент-файл, который указывает на вашу папку. Кидаете чуваку торрент-файл, который весит несколько килобайт - чувак через торрент качает папку - профит.
    Ответ написан
    6 комментариев
  • Как на развернуть весь сайт в index.php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сейчас в этом коде все поставлено с ног на голову.
    Я так понимаю, что всё затевается ради того, что "Шапка и футер сайта у меня везде одинаковые"
    И сначала идет шапка, потом этот матч, а потом футер.
    То есть у нас код начинается с вывода HTML, в то время как это должно быть самое последнее, что происходит в скрипте.
    А всё должно быть строго наоборот - сначала должна выполняться обработка данных РНР кодом, и только потом начинаться вывод HTML.

    Взять к примеру запрос /cart, который в обязательном порядке должен обрабатывать запросы POST
    после такого запроса обязательно должен выполняться редирект. А редирект мы сделать не можем, потому что у нас пол-сайта уже клиенту ушло.
    Не говоря уже о других НТТР загололовках, или о том, что хидер у тебя не статичный, и значительно меняется от страницы к странице.

    Для начала надо сделать вот так, phpfaq.ru/tech/tpl#example

    Потом, когда всё заработает, можно будет переделать на единый индекс, хотя это не будет иметь большого смысла на данном этапе. потом, когда сайт будет представлять из себя не отдельные страницы, а фабрику по отдаче контента - тогда можно будет переделать на единый индекс.
    Ответ написан
  • Чем PHPMailer отличается от обычной mail() функций??

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Функция mail() в PHP по сути вызывает встроенную в систему почтовую программу - стандартно, это sendmail в linux (также, возможно использовать qmail, postfix, но для этого надо сначала сконфигурировать PHP через .ini файл).
    Подробнее про Mail в PHP: https://www.php.net/manual/ru/book.mail.php
    И про основную проблему кроссплатформенного использования: https://habr.com/ru/post/26518/

    PHPMailer - это мощная библиотека, реализующая почтовые транспорты, а не использующая sendmail как стандартная mail() функция. Имеет из коробки большое количество возможностей, таких как (в списке представлена лишь малая часть):
    • полная поддержка SMTP, Qmail, POP3, IDN, DKIM;
    • поддержка SSL и TLS;
    • работает на любой win32 и *nix платформе;
    • гибкость отладки;
    • определяемые вручную заголовки писем;
    • совмещение нескольких сообщений и вложений;
    • встроенная поддержка изображений;
    • умеет посылать письма с множественными: адресатами (TO), копиями (CC), BCC и REPLY-TO;
    • многослойные/альтернативные сообщения для клиентов, которые не могут читать HTML письма;
    • поддержка 8 бит, base64, бинарного режима, и пригодного для печати формата;
    • перенос слов (word wrap);
    • сообщения в виде HTML (шаблоны);
    • библиотека проверена на множестве SMTP серверах: Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier;
    • библиотека используется под капотом таких гигантов: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla;

    Подробнее можно прочитать тут:
    https://jino.ru/journal/articles/pochta-phpmailer/
    https://www.sesmikcms.ru/pages/read/ischerpyvajusc...

    Помимо PHPMailer существуют и другие крутые библиотеки, оставляю список для интересующихся:
    Swiftmailer
    (Symfony) Mailer

    Если вы активно пользуетесь функцией mail() при разработке на PHP и до сих пор ещё не сталкивались с проблемами при её использовании на хостингах или на своих собственных серверах без соответствующего правильно настроенного окружения, то mail() вам идеально подходит. А когда столкнётесь с проблемами или захотите иметь больше возможностей из коробки, станут очевидными плюсы PHPMailer и других специализированных библиотек.
    Ответ написан
    1 комментарий