• Как компилировать только те файлы, которые используются в проекте gulp?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    на любой случай жизни.

    ну и зачем это?
    Ставьте в проект только нужные пакеты из того же npm и собирайте их.
    Используйте современный javascript чтобы легко импортировать пакеты.
    Используйте babel для сборки.

    npm install jquery

    import $ from 'jquery';
    
    $('.selector');


    gulp.task('js', function () {
        return gulp.src('src/app.js')
            .pipe(babel())
            .pipe(terser()) // uglify устарел давно
            .pipe(gulp.dest('dist/js')),
    });
    Ответ написан
    Комментировать
  • Как понять блокчейн?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    в чем его преимущества

    Ни в чем. Просто модная хайповая тема. Так же как "облака". Поначалу пытались впихнуть как всегда невпихуемое, кто-то поднял бабла, кто-то прогорел, после того как хайп прошел и стала ясна область применения - сидят тихо и не жужжат, потому что область применения оказалась очень узкой и весьма специфичной...
    Ответ написан
    4 комментария
  • Как сохраненить сессии между rest-запросами в spring boot?

    @Akela_wolf
    Extreme Programmer
    Сессии работают следующим образом: при создании сессии сервер отсылает заголовок Set-Cookie браузеру в котором сохраняет значение идентификатора сессии (JSESSIONID). При последующих запросах браузер посылает "печеньку" обратно серверу и тот, получив идентификатор, может восстановить сессию из своего хранилища. Если "печеньки" заблокированы, то возможно передать jsessionid как query param запроса. Но это уже требует дополнительных телодвижений на стороне клиента.

    Так как вы упоминаете REST, то предположу использование XmlHttpRequest в браузере (напрямую или опосредованно через какую-то библиотеку), который не посылает заголовок Cookie по умолчанию.

    Поэтому вариантом решения может быть отправка идентификатора сессии явным образом как query param с именем jsessionid.

    Однако, использование сессии в REST запросах - в целом не очень хорошая практика, так как REST предполагается быть stateless. А в случае сессии у вас появляется состояние на стороне сервера. Если сессия нужна только для аутентификации клиента, то посмотрите на использование токенов, таких как JWT, которые позволяют решить эту проблему без наличия сессии на стороне сервера.
    Ответ написан
    Комментировать
  • Как держать все используемые копии базы данных в актуальном состоянии?

    vabka
    @vabka
    Токсичный шарпист
    Не нужно ничего велосипедить.
    У MySQL же есть репликация из коробки:
    https://habr.com/ru/post/56702/
    https://dev.mysql.com/doc/mysql-replication-excerp...
    Настроить можно разное. Постоянное соединение не нужно.
    Ответ написан
    Комментировать
  • Недостатки видеоуроков?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Нужен огромный и продолжительный труд, чтобы написать приличную книжку.
    Чтобы в ней было не 10 страниц, а много хорошего материала, с примерами, с задачами, с изложением. Оформить, вычитать, отредактировать, договориться с издателем, выпустить, получить какую-то отдачу.
    Хорошую книгу ты читаешь долго. Месяц, два, год. Перечитываешь.

    Текст ты читаешь в удобном для себя темпе, легко пересматривая и перечитывая абзацы.
    Остановившись на странице книги, ты можешь просто просмотреть глазом предыдущую страницу и продолжить чтение. С видео так не получается - из головы вылетает все, и надо просматривать как минимум пару минут перед этим, если отлучился на час-два.

    В любой момент можно в тексте что-то найти, что-то подсмотреть в быстром темпе, и даже в бумажном варианте для этого достаточно просто содержания. А в электронном виде оттуда легко копируется текст, команды, код, конфиги.
    Перемотка в видео так не работает. Закладки на видео в виде справочника не работают. Сам себе заметки в виде видео ты не пишешь, не выписываешь, и переписать из книги проще, чем из видео.

    Также видео делать сложнее, чем писать текст. Гораздо дольше. Гораздо дороже.
    Редактирование видео вещь в разы более муторная, поэтому чаще просто переснимают короткие блоки, а это опять таки непросто.
    То есть сделать видео с таким же качеством материала и с такой же плотностью материала - в десятки раз дороже по всем ресурсам - деньги, время, оборудование.
    И при этом никто не будет смотреть месяц видео (160 часов, например). Никто не будет делать поиск внутри видео, закладки на нужные отрывки и использовать видео как справочник.

    Перенести материал из книги перенести в видео - это непомерный труд с одной стороны и совершенно невостребованный с другой стороны.
    А поэтому никто не делал, не делает и не будет делать видео с таким же наполнением материалом, как это можно сделать в тексте.

    Видео - это разок посмотреть на чей-то практический материал, разок посмотреть как это делает кто-то другой.

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

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

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

    P.S. Все вышесказанное касается разработки и администрирования. В "визуальных" профессиях, возможно видео может давать гораздо больше. Например хореография, фехтование, музыка, возможно дизайн. Но там тоже множество книг, которые дают фундаментальную информацию лучше, чем видео.

    P.S. Одним из самых важных минусов видео я считаю то, что ты не можешь получать информацию в комфортном для себя темпе, с возможностью быстро перечитать слово/фразу и обдумать ее. Сам читаю множество лекций, и эта проблема, когда скажешь 2-3 предложения быстрее, чем обычно и половина учеников отваливается с бессмысленным взгядом. Так на живом курсе ты можешь обратить на это внимание и перефразировать, а записанное видео уже не изменишь.
    Ответ написан
    1 комментарий
  • Пользуетесь ли вы кириллицей в Git?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Как в команде договоритесь - так и будет. Для себя пишу на русском. На работе тоже. На прошлой работе писали на английском, хотя компания тоже российская.
    Ответ написан
    Комментировать
  • Стоит ли переплатить за процессор?

    @Akela_wolf
    Extreme Programmer
    Смотрите, главное различие между ними это количество ядер
    У 5600G - 6 ядер/12 потоков
    У 5700G - 8 ядер/16 потоков

    Еще у 5700 более мощная видеокарта встроена.

    Собственно далее вопрос: у вас, в вашей нагрузке будет чем утилизировать эти дополнительные 2 ядра/4 потока? Это либо задачи, которые хорошо параллелятся, либо большое количество процессов (виртуальные машины, например). Я в свое время взял 1700 первого поколения именно из-за этих дополнительных ядер по сравнению с 1600. Собственно никаких проблем с пиковой загрузкой проца не имею. Может быть хватило бы и 6 ядер, может быть и 4. Но, поскольку комп я брал надолго (и мне его более чем хватает на данный момент), то решил брать максимально доступную конфигурацию (был еще Threadripper, но его цена чуть более чем неприличная).

    Занимаюсь разработкой на Java и время от времени играю в не особо требовательные игры.

    Лично я при таких условиях взял бы 5700, но решать разумеется вам.
    Ответ написан
    Комментировать
  • Достаточна ли защита сайта php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Что такое "файл с защитой от sql-инъекций"? Это звучит как "я никогда не заражусь спидом, потому что когда я занимаюсь сексом, то в соседней комнате у меня специальная тумбочка с кучей презервативов". Презерватив надо использовать в процессе, а не держать в отдельной тумбочке. Только тогда он поможет.

    "хотя это можно прописать и в .htaccess" - это совсем какой-то идиотизм, причем заведомо вредный

    "Всё, начиная с php авторизации, защищено от прямого доступа" - это тоже, хотя просто бесполезный

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

    В целом, из того что описано, помимо нескольких бессмысленных телодвижений, проблемы я здесь вижу по трем пунктам
    1. Какая-то странная "защита от инъекций", которая скорее всего ни от чего не защищает, а только портит данные
    2. Большой вопрос, как именно "генерируется" код доступа.
    3. Вообще не упомянута защита от XSS. Ну и CSRF если уж на то пошло

    Плюс вероятные дыры в конкретной реализации, когда на словах вроде правильно, но в коде реализовано криво. Типа location в качестве защиты страниц от доступа. Ну и в целом надо код видеть. Может быть там какое-нибудь гениальное incude $_GET['page'];
    Ответ написан
    3 комментария
  • Может ли не серверное железо перекрыть серверное или как собрать новый сервер?

    hint000
    @hint000
    у админа три руки
    В принципе задача построения оптимальной железяки на базе десктопных комплектующих вполне решаема (на базе серверных комплектующих тоже вполне решаема). Но нужно учесть немало деталей.

    Во-первых, каков бюджет?

    Во-вторых, почему не рассматриваете горизонтальное масштабирование вместо вертикального? Для кучки виртуальных машин было бы очень логично не менять железо, а рядом со старым поставить новое.

    В-третьих, готовы ли пожертвовать IPMI? Это нормально во многих случаях, но всё же это должно быть осознанное решение.

    В-четвёртых, максимальный объём памяти на десктопных материнках. Если захочется больше, чем 128 ГБ, то Socket LGA2066 или TRX4 (но что-то не верю, что TRX4 впишется в бюджет). Если достаточно 128 ГБ, то можно взять AM4 или LGA1700. Есть ровно одна причина, по которой можно выбрать LGA1700 - это возможность в первых рядах героически броситься на амбразуру DDR5 (пока дорогая память и пока небольшой выигрыш в производительности). Если нет склонности к героизму или нет возможности разбрасываться деньгами, то на сегодня оптимально будет AM4.

    В-пятых, количесво ядер. Сейчас у вас два 4-ядерных процессора. На десктопном железе будет один процессор. Он должен превосходить старые не только по частоте, но и хотя бы не уступать по количесву ядер и потоков. Т.е. хотя бы 8C/16T (и даже такой минимальный вариант уже даст выигрыш).

    В-шестых, помните про интегрированный GPU. В серверном решении он был на материнке. Обращайте внимание на наличие или отсутствие графических ядер в десктопных процессорах. Часто при большом количестве ядер встоенная графика отсутствует, в этом случае нужно не забыть поставить дискретную "затычку" (что-нибудь вроде GT710).

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

    @rPman
    НИКОГДА не покупай готовые сборки у тех, кто заинтересован в сбыте комплектующих. В эту сборку напихают говно, без вариантов, либо за твои хотелки возьмут тройную цену.

    Готовое железо ВСЕГДА дороже самосбора из тех же комплектующих. Если это не так, значит где то как то вас пытаются обмануть, подсунув брак или БУ. Когда ты покупаешь готовую сборку ты даже не можешь проверить, новое железо или БУ подчистили. Особенно это стало актуально с тотальным дифицитом видеокарт. Ты уверен что магазин не майнил на этой видяхе? Телевизоры и ноутбуки они легко крутят включенными на стеллажах, и мало кто скажет об этом покупателю или предложит 30% скидку за это, ибо БУ. Чем компьютер хуже? а денег срубить позволяет больше чем сомнительная реклама.

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

    p.s. кризис и дифицит сделал свое черное дело, с ценами будет пиздец еще несколько лет
    Ответ написан
    Комментировать
  • Какой бы вы посоветовали ПК из этих трех?

    @Drno
    Сборки шлак. И завышены сильно
    Проще, дешевле и надежнее самому собрать. Я думаю у Вас есть знакомый чел, который за 5ру соберет всё по красоте...
    Ответ написан
  • Почему не отправляется POST через Vue Resource?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Мужик, если ты используешь vue-cli, то рандомные файлы которые ты просто куда-то кинул не появятся магическим образом во встроенном сервере. Для публично доступных файлов предназначена папка public.
    Однако, встроенный сервер vue-cli не умеет и не должен уметь исполнять php, это совершенно из другой оперы языки и технологии.
    Для разработки тебе надо поднять отдельный php сервер на отдельном порту и через vue devserver proxy пробросить на него подобные запросы.
    Для прода - тебе надо настроить прод сервер по вкусу.
    Ответ написан
    1 комментарий
  • Как правильно покрыть тестами приведенный в примере код?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    https://github.com/index0h/php-conventions#7-тести...

    Конкретно по коду:
    1. Не стоит упарываться по разбиванию всего на отдельные методы. Фактическую сложность вы не уменьшите, вместо этого заставите инженера, который будет это смотреть бегать по классу что бы связать как-то ваши однострочники. Конкретно в вашем случае стоит сделать всего один метод getValue, а то что вы разбрасали по защищенным - запихнуть в getValue.

    2. Инстансы db и timedate стоит передавать в конструктор явно, а от статики отказываться, на сколько это возможно.
    Ответ написан
    4 комментария
  • Как frontend разработчику тестировать локальный сервер?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    хм а в чем проблема?

    в вашем проекте создаются папки
    sql
    sql\up
    sql\down

    В up складываются миграции по наращиванию
    В down по убыванию
    Формат пусть будет номер тикета (дата) + описание

    Сами файлы делятся на 2 типа модификация схемы и наполнение \удаление данных

    В итоге подтянув изменения вы просто выполняете скрипт(ы) и получаете актуальную базу
    Ответ написан
    Комментировать
  • Как написать bash скрипт, который будет запускать файл, который поддерживает аргументы командной строки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    #!/bin/bash
    python3 get-movies.py "$@"


    Тут запись "$@" означает передать все аргументы скрипта как они есть, причём с правильным экранированием, то есть "Termninator 2" будет передано как "Terminator 2", а не "Terminator" "2".

    upd: Ещё добавлю, что для такого простого случая может больше подойти другой подход: передача интерпретатора через шебанг. Надо первой строкой файла get-movies.py указать:

    #!/usr/bin/env python3

    В этом случае запуск скрипта будет приводить к вызову /usr/bin/env python3 get-movies.py со всеми остальными параметрами.
    Ответ написан
    Комментировать
  • Редирект с http на https без слэша в конце, как реализовать в nginx?

    fzfx
    @fzfx
    18,5 дм
    редирект на https://test.com/ без слеша на конце никак не сделать, поскольку в URL после имени домена в обязательном порядке идёт слеш.
    Ответ написан
    2 комментария
  • Как добавить данные в БД через HTML-форму?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сначала учимся правильно соединяться.
    В случае mysqli это
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect($host, $user, $pass, $db_name);
    $link->set_charset("utf8mb4");

    И никаких ужасов с "Соединение не установлено" тут быть не должно.

    После этого выполняем запрос INSERT. Причем запросы мы всегда пишем так, чтобы данные в БД попадали отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $title, $discription, $date, $path);
    $stmt->execute();

    bind_param() принимает в качестве параметров все переменные, которые должны попасть в запрос, в том же самом порядке, в котором стоят плейсхолдеры в запросе. Но кроме того, сначала в этой функции должны быть указаны типы для всех переменных, в виде строки, где тип переменной обозначается одной буквой. То есть букв в этой строке должно быть ровно столько, сколько дальше будет переменных. К счастью, можно особо не париться с типами и для всех переменных указывать тип "s".

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

    Весь код, который добавляет запись в БД, должен быть расположен ДО любого вывода.
    После обработки запроса методом POST необходимо перенаправить клиента куда-нибудь методом GET и завершить работу скрипта. Делается это функцией header с заголовком location: . после которой написать exit;
    Соответственно, никаких ужасов с "Запись добавлена".

    Кстати, немного удобнее с БД работать не через mysqli, а чрез PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute

    Подключение
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $port = "3306";
    $charset = 'utf8mb4';
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
    $pdo = new \PDO($dsn, $user, $pass, $options);


    Выполнение запроса
    $sql = "INSERT INTO `events` (`title`, `discription`, `date`, `img`) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$title, $discription, $date, $path]);
    Ответ написан
    1 комментарий
  • Как прописать во frontend сборке (Gulp 4) абсолютные пути?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    относительный/путь/от/текущей/директории, /относительный/путь/от/корня/сайт
    https://mysite.com/Page/1:
    <script src="/js/main.js">: https://mysite.com/js/main.js
    <script src="js/main.js">: https://mysite.com/Page/1/js/main.js
    Ответ написан
    2 комментария
  • Почему именно 5в напряжение в адаптерах для смартфонов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем, собстенно вопрос? Почему именно 5 выбрано стандартом, а не 4 или 6? Или, скажем, 12, 24, 36 или 100 вольт?
    Нужно понимать, что есть такая штука, как закон Ома. Сила тока прямо пропорциональна напряжению и обратно пропорциональна сопротивлению. Сопротивление - это свойство проводника, зависит (если не слишком углубляться) от того, что за метал, от его толщины и длины. А ещё у нас всегда ограничена мощность источника тока.
    Мощность - это количество энергии, которая расходуется, преобразуется или передаётся за единицу времени.
    Вот у нас есть кабель и нам нужно передать через него 5 ватт, чтобы достаточно быстро зарядить смартфон. Ка краз получается 5 вольт * 1 ампер = 5 ватт. То есть по нашему кабелю должен идти ток 1 ампер. Это достаточно большой ток, и, если у нашего кабеля будет слишком большой сопротивение (то есть он будет длинным, или тонким, или не из меди), то большАя часть передаваемой энергии будет тратиться на бесполезный нагрев кабеля.

    Если хочется поднять мощность вдвое, чтобы еще быстрее зарядить смартфон, придётся либо удвоить ток, а при этом удвоится учетверится энергия (ведь зависимсть от тока квадратичная), уходящая на нагрев и чтобы это го не происходило, нужно делать толще кабель, покрывать его серебром (у которого низкое сопротивление), делать провод короче. Всё это дорого и неудобно.
    Второй вариант - это удвоить напряжение, тогда при напряжении 10 вольт и том же токе в 1 ампер передаваться будет уже 10 ватт мощности при тех же потерях на нагрев проводов.
    Получается, что за счет увеличения напряжения можно снижать потери на передачу энергии по тем же тонким. гибким недорогим проводам, что и раньше, НО!

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

    Получается такая вот дилемма. Электроника между током и напряжением балансирует как между Сциллой и Харибдой, пытаясь сэкономить на том-на сём.

    Там, где нужны большие мощности, риходится задирать напряжение. Именно поэтому у нас в розетке 220в, а между фазами 380. Чтобы закипятить двухкилловатный чайник приходится пропускать ток почти 10 ампер, но нам важно, чтобы грелся чайник, а не провода от розетки до чайника и в стенах. Поэтому провода толстые, гораздо толще вашего шнурочка зарядки от мобильника или дорожек на плате внутри него.

    Там, где важна в основном логика и мощность требуется не сильно, лишь для подсветки экрана или яркого светодиода вспыщки, выбирается небольшое напряжение 5 в. В процессорах и вообще в интегральных микросхемах приходится использовать еще меньшее напряжение 3.3в, чтобы не пробивали очень тесно проложенные дорожки внутри. Снижать еще сильнее напряжение уже проблематично, поскольку есть ограничения снизу на открытие p-n переходов. Просто не хватает напряжения для переброса электронов в слоях полупроводнка.

    Так что не 5 вольтами едиными жива электроника. Где-то, например для питания светодиодов, не так важн о напряжение, как ток. Он должен быть в заданных рамках, поскольку превысив возможности рассеивать тепло мы буквально сожжем p-n-переход, поэтому приходится варьировать напряжение так, чтобы ток сохранялся в допустимы пределах.
    В автомобиле стандарт 12 вольт и во многих грузовиках 24. Про розетку я уже говорил и там отдельная тема почему и как устроены электро-сети разных стран. В вашем ноутбуке и смартфоне целый зоопарк напряжений. Раньше даже встречались устройства, где подсветка экрана требовала несколько киловольт.
    Мощность при этом не большая, а изоляция рассчитана на то, чтобы ничего не пробило, но это отдельная цепь внутри устройства и в каждом месте нужно то напряжение, на которое рассчитаны соответствующие участки цепи.
    Ответ написан
    2 комментария
  • Как вывести одинаковый блок на всех страницах HTML не редактируя файлы?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Конечно же нельзя.
    Но вы можете перенаправлять все запросы в php файл, который будет получать контент из html файлов и изменять его нужным образом. Но тогда у вас будет уже не "html сайт".
    Ответ написан
    4 комментария