Задать вопрос
  • Как правильно перенаправить трафик с одного сервера на другой?

    @Drno
    Что за протокол впн? Тот же опенвпн и вайгуард умеют пушить dns клиентам…
    Ответ написан
    2 комментария
  • Как сделать, чтобы сайт быстрее загружался?

    dima9595
    @dima9595
    Junior PHP
    Sass, less, gulp и прочие сборщики ни как, практически, не улучшат скорость загрузки. Да, через сборщики можно уменьшить тот же самый css файл посредствам минификации, но это дело другое..
    В вашем случае у вас крайне мало файлов для каких-либо серьёзных проблем.

    Из советов из своего опыта могу выделить следующее:
    1. Разбейте css файл на важные и не особо важные части. В важном - основа страницы, сбросы стилей и т.п. В неважном - всякие красоты и т.п.
    2. Сожмите все css файлы.
    3. Сожмите все используемые картинки. В качестве бонуса можно сделать их в формате webp, но используйте их как запасной вариант, так как не все старые браузера поддерживают этот формат.
    4. Запустите сайт и проверьте загрузку через специальные средства (Google Pagespeed, например) и встроенными средствами браузера. Так вы увидите слабые места загрузки.
    5. Оптимизируйте JS скрипты, проверьте что бы они правильно подключались и загружались после прогрузки страницы.
    Ответ написан
    Комментировать
  • Как установить Windows 10 рядом Ubuntu LTS?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    https://itsfoss.com/install-windows-after-ubuntu-d...

    Вот по шагам.

    Если кратко:
    1. сжать диск
    2. создать загрузочную флешку для убунты
    3. установить винду
    4. восстановить grub c пп2
    Ответ написан
    3 комментария
  • Как прикрепить внешний доп ipv4 к пк за роутером?

    Скорее всего, вам просто на роутере достаточно настроить проброс портов на компьютер. Тогда запрос на публичный-ip:80, например, роутер будет автоматически пересылать на локальный-ip:80 и вы сможете добираться до своего компьютера из внешки по публичному ip.
    Ответ написан
    8 комментариев
  • Как получить текст с сайта через python?

    Mi11er
    @Mi11er
    A human...
    Читаем про отложенные задачи и Celery
    Дальше можно соединить с ботом в телеге.
    Ответ написан
    Комментировать
  • Как стать владельцем своего устройства?

    CityCat4
    @CityCat4
    Жил да был черный кот за углом...
    1. Убери эту хренову портянку под спойлер.
    2. Это называется root-доступ. Для его получения - на 4PDA, в тему телефона.
    3. Для получения рута в современных телефонах всегда нужен сброс к заводу для разлочки загрузчика. Разлочка загрузчика нужна, чтобы отключить проверку контрольных сумм разделов - иначе получишь кирпич. Если что-то пойдет не так - получишь кирпич. Если зашьешь не ту прошивку - получишь кирпич.

    (Для старых версий андроида была возможность зашить boot.img с патчем magisk, пока не начали сверять контрольные суммы)

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

    scoffs
    @scoffs
    Fullstack | C# | Student
    Вам потребуется добавить код, который будет обрабатывать все ссылки с префиксом /go/ и добавлять необходимый JavaScript-код для цели Яндекс Метрики.

    Что-то типа этого:
    function add_yandex_metric_goal() {
        if (is_singular()) {
            global $post;
            $content = $post->post_content;
    
            // Поиск всех ссылок с префиксом /go/
            preg_match_all('/<a href="\/go\/(.*?)"/', $content, $matches);
    
            // Добавление JavaScript-кода для цели Яндекс Метрики к найденным ссылкам
            if (!empty($matches[1])) {
                $goal_code = "ym(83804250, 'reachGoal', 'goshop'); return true;";
                $replacement = '<a href="/go/$1" onclick="' . $goal_code . '"';
                $content = preg_replace('/<a href="\/go\/(.*?)"/', $replacement, $content);
    
                // Обновление контента поста
                $post->post_content = $content;
                wp_update_post($post);
            }
        }
    }
    add_action('wp', 'add_yandex_metric_goal');


    Приведенный код будет искать все ссылки с префиксом `/go/` на страницах постов или страниц WordPress и добавлять необходимый JavaScript-код для цели Яндекс Метрики.

    Убедитесь, что замените 'ym(83804250, 'reachGoal', 'goshop'); return true;' на ваш фактический код цели Яндекс Метрики.

    После добавления этого кода в functions.php и сохранения изменений, все партнерские ссылки с префиксом /go/ на вашем сайте должны быть обработаны и получить нужный JavaScript-код для цели Яндекс Метрики.
    Ответ написан
    3 комментария
  • Что такое Trojan:HTML/Phish.YH!MTB?

    Название и тот факт, что он лежит в кэше браузера намекают, что он видимо может подменять сайт собой для кражи твоих данных.
    Ответ написан
    1 комментарий
  • Что такое бизнес логика и как их разделять с логикой приложения?

    Adamos
    @Adamos
    Владимир, вы бы еще архитектуру хелловорлда взялись "понимать".
    Если хотите понять в двух словах, то можно применить такой принцип: бизнес-логика - это то, ЧТО должно выполнять приложение. А логика приложения - то, КАК оно это выполняет. Гругря, "по заказу формируются документы в формате XLSX и PDF" - это бизнес-логика. А вот запрос к БД за данными заказа, разбор шаблона документа, использование библиотек для генерации файлов нужного формата - это логика приложения. Отталкиваясь от такого примитивного понимания, можно разглядеть уровни в коде: где программист размахивает человекопонятными блоками и выполняет техзадание, а где - копается в байтах, соединениях и потоках вывода. Если мы одно от другого отделяем, то оказывается, что низкий уровень для большинства задач один и тот же и его можно опять-таки собрать в библиотеки и практически без изменений использовать там, где понадобилась другая бизнес-логика, но использован тот же технологический стек.
    Ответ написан
    1 комментарий
  • Что можно сделать на ноутбуке, чтобы уменьшить его нагрев?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    Продуёте пыль, смените термоинтерфейсы, проверьте пластину охлада на деформацию... вариантов масса.
    Ответ написан
    Комментировать
  • Как локадизовать сайт на другие языки?

    Создать 1 домен, но указать 10 префикстов типа .com/en, .com/ru и тд. Здесь я вижу плюс в том, что не нужно создавать много доменов. Но минус в том, что SEO будет хорошее только для того языка, какой язык имеется у главной страницы. И что-то мне подсказывает, что через поисковые системы меня другие страны не найдут...

    Всё нормально индексируется и ищется - никакие дополнительные домены не нужны (и в некоторых случаях могут быть даже вредны, тк два разных домена = два разных сайта)
    Главное чтобы корректно были расставлены метаданные на всех страницах.

    Отображать юзерам содержимое исходя из ИП адреса пользователя.

    Вот так вообще не надо делать. Но если у тебя всё ок с метаданными, то ты можешь по первому посещению нового клиента попробовать предложить ему нужный перевод.
    Поисковым роботам предлагать такого не надо.

    Как это сделано у ютуба например, или тиктока

    У них так не сделано.
    Ответ написан
    8 комментариев
  • Не могу найти ошибку почему не приходят письма?

    @MurinSergey Автор вопроса
    что может быть не так
    $(document).ready(function () {
    
    	const namet = document.getElementById('feedback_form_name3');
    	const phonet = document.getElementById('feedback_form_phone3');
    	const feedbackformurl3 = document.getElementById('feedback_form_url3');
    
    	$(".submitButton").click(function () {
    		const nameValuet = namet.value;
    		const phoneValuet = phonet.value;
    		const feedbackformurl5Value = feedbackformurl3.value;
    		// Получение значения checkbox
    		var isChecked = $("#checkboxAgree").is(":checked");
    		// Проверка значения checkbox
    		if (!isChecked) {
    			// Вывод сообщения об ошибке
    			alert("Пожалуйста, примите политику конфиденциальности.");
    			return; // Прерываем выполнение функции
    		}
    
    		if (nameValuet == "" || phoneValuet == "") {
    
    			$("#feedback_form_danger3").css("display", "");
    
    		}
    		else {
    
    			$("#feedback_form_danger3").css("display", "none");
    			$("#feedback_form_success3").css("display", "");
    
    			$.ajax({
    				type: "POST",
    				url: "/local/components/main/send.form/templates/send.form-newdesignPartnersTop/ajax.php",
    				caches: false,
    				data: { NAME: nameValuet, PHONE: phoneValuet, },
    				dataType: "html",
    				beforeSend: function () {
    					$(".submitButton").prop("disabled", true);
    				},
    				success: function (data) {
    					if (!data)
    						alert("Были ошибки, письмо не отправленно!");
    					else
    						$("#form__top").trigger("reset");
    					$(".submitButton").prop("disabled", false);
    				},
    			});
    		}
    
    	});
    });

    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    // Файлы phpmailer
    require 'phpmailer/PHPMailer.php';
    require 'phpmailer/SMTP.php';
    require 'phpmailer/Exception.php';
    
    # проверка, что ошибки нет
    if (!error_get_last()) {
    
        // Переменные, которые отправляет пользователь
        $name = $_POST['name'] ;
        $phone = $_POST['phone'];
    
        // Формирование самого письма
        $title = "Заголовок письма";
        $body = "
        <h2>Новое письмо</h2>
        <b>Имя:</b> $name<br>
        <b>Телефон:</b> $phone<br><br>
        ";
        
        // Настройки PHPMailer
        $mail = new PHPMailer\PHPMailer\PHPMailer();
        
        $mail->isSMTP();   
        $mail->CharSet = "UTF-8";
        $mail->SMTPAuth   = true;
        //$mail->SMTPDebug = 2;
        $mail->Debugoutput = function($str, $level) {$GLOBALS['data']['debug'][] = $str;};
        
        // Настройки вашей почты
        $mail->Host       = 'smtp.mail.ru'; // SMTP сервера вашей почты
        $mail->Username   = 'murin@fredtm.ru'; // Логин на почте
        // $mail->Password   = '=========='; // Пароль на почте
        $mail->Password   = '3p65pdztMft6QFeNmkrm'; // Пароль приложения 
        $mail->SMTPSecure = 'ssl';
        $mail->Port       = 465;
        $mail->setFrom('murin@fredtm.ru', 'Name'); // Адрес самой почты и имя отправителя
        
        // Получатель письма
        $mail->addAddress('vitamin-971@yandex.ru');  
    
    
        // Отправка сообщения
        $mail->isHTML(true);
        $mail->Subject = $title;
        $mail->Body = $body;    
        
        // Проверяем отправленность сообщения
        if ($mail->send()) {
            $data['result'] = "success";
            $data['info'] = "Сообщение успешно отправлено!";
        } else {
            $data['result'] = "error";
            $data['info'] = "Сообщение не было отправлено. Ошибка при отправке письма";
            $data['desc'] = "Причина ошибки: {$mail->ErrorInfo}";
        }
        
    } else {
        $data['result'] = "error";
        $data['info'] = "В коде присутствует ошибка";
        $data['desc'] = error_get_last();
    }
    
    // Отправка результата
    header('Content-Type: application/json');
    echo json_encode($data);
    
    ?>
    Ответ написан
    1 комментарий
  • Нужно ли хорошо разбираться в алгоритмах джуну?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вопрос в том, сильно ли важны алгоритмы для начинающего разработчика(джуна) и стоит ли уделять им более пристальное внимание на ранней стадии обучения или не стоит на них зацикливаться и хардтраить

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

    Совместить. Изучать инструмент + популярные алгоритмы, которые Вы будите применять в ходе разработки в рамках данного инструмента. Больше инструментов > больше алгоритмов.
    Ответ написан
    3 комментария
  • Надо ли что-то еще делать для избежания SQL инъекций?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    (не знаю как называется)
    Называется подготовленные выражения/prepared statements, почитать можно тут.
    Ответ написан
    Комментировать
  • Как работает процесс создания сайта?

    MrDecoy
    @MrDecoy Куратор тега HTML
    Верставший фронтендер
    надо лендинг пейдж
    понадобится CMS

    Достаточно сомнительно. Лендинг - это одностраничный сайт, как правило, заточенный на продажу ограниченного количества позиций из товаров\услуг (как правило 1-3 позиции). Ну либо какая-то информационная страница общего характера. Прикручивать для такого CMS - избыточно.

    А всё далее Вами описанное это всё зависит от того, к кому заказчик пришёл. На все вопрсы в любой последовательности можно отвечать да или нет. На какие то можно ответить да, а на какие то нет. И наоборот. То есть зависит от исполнителя.

    Фуллстэк фрилансер может сделать всё. Может иметь товарищей с которыми разделит проект.

    Нормальная компания\веб-студия сначала соберёт с заказчика контент, придаст ему сеоподобную форму(что для лендинга как правило малополезно) сделает прототип, нарисует дизайн с согласованным контентом, согласует с заказчиком дизайн, после чего отдаст дизайн на вёрстку и разработку бэкенда. А после зальёт на хостинг, и предложит настройку рекламы для лендинга, т.к. это самый эффективный путь продвижения на старте и для лендинга в принципе. Всё настроит и передаст заказчику исходники.
    Ответ написан
    4 комментария
  • Нужно ли Отключение аккумулятора при апгрейде ноутбука?

    Лучше всё-таки отключить.
    Если боишься повредить - неси в сервис, ибо есть неиллюзорный шанс повредить весь ноутбук, если не отключить питание.
    Ответ написан
    Комментировать
  • Как скопировать сайт требующий авторизацию?

    Steel_Balls
    @Steel_Balls
    Обычный парсинг с сохранением авторизационных куки
    Ответ написан
    Комментировать
  • Как объединить две локальные сети через OpenVPN?

    Frostealth
    @Frostealth
    Backend Developer
    Не помешают конфиги OpenVPN и таблицы маршрутизации с обоих роутеров.
    Предполагаю, что на роутере1 (кв1) отсутствует маршрут до сети кв2 через VPN.
    Исходный ответ

    Настройка маршрутов в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1011706/

    Итак, требуется на роутере1 прописать маршрут к роутеру2 для сети кв2.
    Маршрут примерно такой:
    - IP-адрес сети: 192.168.1.0
    - Сетевая маска: 255.255.255.0
    - Шлюз: IP-адрес роутера2 внутри сети VPN, например 10.8.0.2

    И не забыть прописать для роутера2 статический адрес (10.8.0.2) для OpenVPN. Иначе OpenVPN сервер может выдать роутеру2 другой IP.

    Без маршрута, роутер1 не будет понимать на какой порт/интерфейс направлять запросы к сети 192.168.1.0/24.

    Если не заработает, то, вероятно, через сеть VPN в сеть клиента VPN отсутствует NAT. Тогда следует сконфигурировать брандмауэр (firewall) на роутерах, в т.ч. и на роутере1. Настройка брандмауэра в ASUS описана здесь: https://www.asus.com/ru/support/FAQ/1013630/

    Необходимо, чтобы брандмауэр на роутере1 пропускал запросы из сети 192.168.1.0/24 в сеть 192.268.0.0/24. И наоборот, на роутере2 - из сети 192.168.0.0/24 в сеть 192.168.1.0/24. Без этого роутер будет отбрасывать все запросы во внутреннюю сеть из других сетей.


    При решении данного вопроса с автором возникли проблемы с роутерами ASUS. Клиент (роутер2) ни в какую не видел сеть за сервером (возможно упустил какую-то опцию, "route ..", "iroute" и "push 'route ...'" не помогли). Решение с tap не подходило из-за отключения DHCP на роутере2.
    Основная проблема - это невозможность загрузить в роутер целиком файл конфигурации сервером. А документацию консоли роутера (через ssh) найти быстро не удалось.
    Если кто знает решение, прошу описать его в комментариях.

    Аренда VPS (выделенного сервера) с Ubuntu и поднятие OpenVPN сервера уже на нем с последующим подключением двух роутеров в качестве клиента решили проблему.
    Можно поднять и на ПК в сети, конечно. В таком случае нужно будет добавить статический IP для этого ПК и выполнить проброс портов в настройках роутера.

    Установку и основную настройку сервера OpenVPN помог упростить скрипт https://git.io/vpn, который пришлось редактировать для замены зашитой в нем сети 10.8.0.0 на другую в связи с наличием пересечения данной сети с другой на одном из роутеров.

    Итак, установка и конфигурация сервера OpenVPN на Ubuntu для объединения двух сетей роутеров без выхода в интернет через VPN. Для начала необходимо подключиться к серверу по SSH.

    Установка OpenVPN с помощью скрипта через терминал. Скачиваем скрипт и запускаем его командами ниже.
    >>> wget https://git.io/vpn -O openvpn-install.sh
    >>> sudo bash openvpn-install.sh


    Отвечаем на все запросы скрипта, выбираем протокол UDP.
    После завершения установки открываем файл nano /etc/openvpn/server/server.conf, удаляем все строки, начинающиеся на push, и добавляем следующее:
    ifconfig-pool-persist ipp.txt
    client-config-dir /etc/openvpn/server/ccd
    client-to-client
    
    route 192.168.0.0 255.255.255.0
    push 'route 192.168.0.0 255.255.255.0'
    
    route 192.168.1.0 255.255.255.0
    push 'route 192.168.1.0 255.255.255.0'

    Пояснение к конфигу

    ifconfig-pool-persist ipp.txt - будет сохранять соответствия выданных им IP адресов в файл `ipp.txt`. Таким образом, каждый клиент будет всегда получать один и тот же IP.

    client-config-dir /etc/openvpn/server/ccd - указывает серверу директорию с дополнительной конфигурацией для каждого клиента.

    client-to-client - разрешает передачу данных между клиентами.

    route 192.168.0.0 255.255.255.0 - уведомляет сервер о локальной сети (192.168.0.0/24) клиента.

    push 'route 192.168.0.0 255.255.255.0' - сервер будет передавать маршрут к указанной сети всем клиентам.


    Далее создадим указанную в конфиге директорию sudo mkdir /etc/openvpn/server/ccd.
    И добавим в нее файлы, названия которых будут отражать имена наших клиентов (указываются далее). И пропишем в них какая сеть какому клиенту принадлежит.
    /etc/openvpn/server/ccd/router1

    iroute 192.168.0.0 255.255.255.0

    /etc/openvpn/server/ccd/router2

    iroute 192.168.1.0 255.255.255.0


    Запускаем скрипт снова для добавления клиента. Для добавления второго запускаем потом еще раз.
    После запуска скрипта вводим цифру 1, соответствующую опции 1) Add a new client.
    Здесь же и указываем название клиента (router1, router2).
    >>> sudo bash openvpn-install.sh

    Скачиваем файлы конфигурации для клиентов, которые сгенерировал скрипт, и загружаем соответствующий конфиг при создании OpenVPN клиента на роутерах.
    Маршруты на роутерах прописывать не надо, как и правила в брандмауэре. OpenVPN сервер сам отправляет маршруты клиентам, которые мы указали в его конфиге ранее с помощью push 'route ...'.
    Ответ написан
    1 комментарий
  • Как передать трафик локальной сети через интернет?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    Жил да был черный кот за углом...
    Программа сервер, который устанавливается на пк в локальной сети

    Наоборот можно. Программа-сервер, которая в тырнете и программа-клиент в локалке. И энидеск обычно подключется именно так.
    Ответ написан
    2 комментария
  • Standalone блоги и RSS мертвы? Где лучше вести свой технический блог?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Правильная стратегия - вести сразу в нескольких местах. Свой сайт, твиттер, медиум, фб и т.д. И везде давать ссылки на альтернативные адреса, чтобы любой пользователь мог подписаться независимо от платформы.

    А еще лучше написать скрипт для автоматической публикации.

    P.S. RSS вообще живее всех живых. Есть прекрасные сайты дающие возможность подписаться на что угодно, зная адрес rss-фида, например https://feedly.com
    Ответ написан
    2 комментария