• Готов поработать по ставке 0 в час. Где найти такую "работу"?

    @jamtuson
    Вы работаете не 0 в час, а вы работаете в минус компании, так как ваш код нужно проверять, обучать вас, давать задачи и это все время более опытного специалиста, который мог бы потратить его на выполнение своей работы за которую ему платят.

    Делайте портфолио и идите в компанию не на 0 в час, а на среднюю по рынку для стажера/juniora
    Ответ написан
  • Как получить access_token, выдаёт 405 ошибку?

    Andrew_Pinkerton
    @Andrew_Pinkerton
    Не так страшны первые 99%, как оставшиеся 99%
    Написано же: Use POST method only!
    Значит данные на этот эндпоинт нужно отправлять POST запросом,
    странно что вы этого не увидели в документации.
    Ответ написан
  • Зачем администрация/модераторы/пользователи отмечают решением ответ, который вовсе не является решением?

    Moskus
    @Moskus
    Потому что Тостер задуман не столько для того, чтобы конкретный автор вопроса получил ответ на вопрос, который удовлетворяет лично его, а для того, чтобы другие люди в аналогичной ситуации знали, как к ней подступиться.
    Если, например, конкретно вы не поняли, как воспользоваться ответом, это не значит, что в общем случае, это не решение. Или если вы забили на то, чтобы отметить решением то, что им, в реальности, является.
    Ну и, тем более, Тостер - не для личного развлечения авторов вопросов в духе "кого хочу, того награжу, а кто мне не нравится - идет лесом".
    Ответ написан
  • Возможно ли выяснить источник трафика по форме заявке?

    @UncleMisha
    Это вовсе не проблема, вам нужны UTM метки. Не знаю как это выглядит в modx но простая форма с utm метками выглядит так:
    <form >
    <input type="hidden" name="utm_source" value="<?php echo isset($_GET['utm_source']) ? $_GET['utm_source'] : '' ;?>" />
    <input type="hidden" name="utm_medium" value="<?php echo isset($_GET['utm_medium']) ? $_GET['utm_medium'] : '' ;?>" />
    <input type="hidden" name="utm_campaign" value="<?php echo isset($_GET['utm_campaign']) ? $_GET['utm_campaign'] : '' ;?>" />
    <input type="hidden" name="utm_content" value="<?php echo isset($_GET['utm_content']) ? $_GET['utm_content'] : '' ;?>" />
    <input type="hidden" name="utm_term" value="<?php echo isset($_GET['utm_term']) ? $_GET['utm_term'] : '' ;?>" />
    <input type="text" name="name" placeholder="Ваше имя">
    <input type="text" name="phone" placeholder="Телефон" required>
    <button type="submit">Отправить</button>
    </form>

    Работать utm метки будут только в файле с расширением "PHP" письма будут приходить к примеру так:
    Имя пользователя: Вася
    Телефон: 8 (777) 777 77 77
    utm_source: google
    utm_medium: cpc
    utm_campaign: utm
    utm_content: ad2
    utm_term: utm метки

    Мануалов в интернете валом :)
    Ответ написан
  • Как в Mikrotik направить весь трафик на VPN кроме определенных адресов?

    @Uragiremono
    Исходные данные:
    WAN - ether1, выход к провайдеру
    172.20.10.2/24 - адрес полученный от провайдера
    172.20.10.1 - его шлюз
    LAN - 192.168.1.0/24
    VPN - ovpn_client
    10.10.10.2/32 - адрес полученный от VPN-сервера
    10.10.10.1 - его шлюз
    с опцией add-default-route=yes, весь трафик по-умолчанию должен уходить через VPN

    Теория такая, сейчас весь трафик по-умолчанию уходит через VPN.
    Нужно промаркировать нужный трафик и отправить его на нужный маршрут.

    1. Завернуть весь трафик в ВПН кроме определенных IP
    # создать список адресов, которые не должны идти через VPN
    ip firewall address-list add list=exclude_list address=192.168.1.10
    ip firewall address-list add list=exclude_list address=192.168.1.11
    
    # маркируем пакеты
    ip firewall mangle add chain=prerouting action=mark-routing dst-address-list=exclude_list new-routing-mark=ether1_route_mangle passthrough=no src-address=192.168.1.0/24
    
    # изменяем маршрут, который идёт к провайдеру
    ip route add dst-address=0.0.0.0/0 gateway=172.20.10.1 distance=1 routing-mark=ether1_route_mangle


    2. Завернуть весь трафик в ВПН кроме определенных доменов *.host.com или поддоменов *
    Тоже самое, что и в 1 варианте, только вместо IP, вводить домен
    ip firewall address-list add list=exclude_list address=host.com
    ip firewall address-list add list=exclude_list address=test.host.com


    3. Завернуть весь трафик в ВПН кроме определенных IP + за исключением определенных устройств (клиентов)
    Это ведь тоже самое, что и первый вариант?
    "определенных устройств" есть IP/домен, просто их добавить в список
    Ответ написан
  • Как у вас происходило обучение python?

    @Uragiremono
    Изучаю python, первый язык. Работаю с сетями, потому знакомство с python начал с прекрасной книги Наташи Самойленко Python для сетевых инженеров(книга абсолютно бесплатна).

    Как у вас шло изучение?
    Если вы уже пишите на python напишите пожалуйста как вы его изучали?

    Читая теорию, надо всегда закреплять практикой.
    Читаю главу много раз, начинаю решать задания, в процессе всегда обращаюсь к теории, т.к. запомнить всё нереально. Иногда сижу целый день над решением задания. Решая задания, запоминаю инструменты(полезные функции, модули, методы), следующие задания идут уже быстрее.

    Хватило ли вам одной книги чтобы написать программу которая описана выше?

    "A byte of python" не читал. Только "Python для сетевых инженеров", книгу освоил примерно на 20%, это 2 главы Основы Python и Повторное использование кода.

    Эту задачу не решал, но примерно уже понимаю как сделать:
    * для удобного взаимодействия со скриптом из командной строки, использовать модуль argparse
    * данные хранить в БД или просто в .txt файле или вообще сохранять объект(например словарь вида:
    {
        'ivan':{'number':'123', 'address':'pushkina'},
        'magomed':{'number':'456', 'address':'lenina'}
    }
    )
    * написать функций для просматривать, добавлять, изменять, удалять или искать контактные данные, которые будут взаимодейстовать с данными в БД/файлом/объектом

    Всё сводится к тому, что надо запомнить инструменты python'а(часто можно услышать от аксакалов python, что программирование это знание алгоритмов, а ЯП это просто инструмент, что конечно верно, но и как пользоваться инструментами тоже надо помнить, иначе это перманентный гуглёж):
    * типы данных, какими они бывают(изменяемые упорядочные и т.д.), как с ними взаимодействовать
    * функции
    * методы
    * операторы
    * циклы
    Это пока всё что я прошёл, даже с такими минимальными знаниями, я облегчил себе работу, автоматизировал рутинные задачи у себя на работе.

    Если что-то не понимаю, тупо гуглю, например задача: надоело прописывать логины/пароли при входе на коммутаторы.
    Гуглишь, на английском обычно больше инфы: подключиться к коммутатору python / connect to switch python
    узнаёшь про модуль pexpect, читаешь документацию, пишешь свой скрипт, всё, теперь в копилке знаний есть модуль pexpect, в следующий раз быстрее решишь задачу.

    Таким макаром пишу свои велосипеды, решил их публиковать, мало ли кому понадобиться, велопарк: https://github.com/Savamoti/scrips_for_reinventing...
    Рекомендую познакомиться с PEP8, не забывать писать комменты(у самого плохо получается пока) к коду, иначе через месяц уже не вспомнишь, для чего это функция, что ожидает и что возвращает.
    Ответ написан
  • Как извлечь подстроку из строки при помощи grep?

    qlkvg
    @qlkvg
    python backend developer
    Для коллекции

    echo "{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}" | grep -oP "(?<=groupid:)[0-9]*"
    Ответ написан
  • Что написать для пополнения портфолио?

    Tiendil
    @Tiendil
    Разработчик ПО.
    Для портфолио подойдёт любой внедрённый проект: сайт с посещениями, бот с пользователями, игра с игроками, etc.

    Сейчас, большая часть сложности разработки ПО находится не в написании самого кода, а в сопутствующих активностях (исследование, организция окружения разработки, тестирование, внедрение, поддержка, etc).

    Поэтому, проект с пользователями (лично в моих глазах) даст фору более сложному проекту разработанному "в стол". Поэтому самая главная рекомендация - решить конкретную задачу, а не фантазировать. Если будет статья на каком-нибудь хабре с лайками и комментариями - совсем замечательно.

    Расчётные проекты могут пойти как в плюс так и в ноль, в зависимости от того, насколько собеседующий в курсе темы, по которой они делались.

    Рекомендовать более точные темы сложно, поскольку не указано чем конкретно хотите заниматься (в какой области хотябы: веб, машинное обучение, офлайн по, etc).

    В сайте только с проектами смысла особого нет. Его легко заменяет профиль на гитхабе. Если делать сайт, то в виде блога, чтобы на нём были какие-то полезные материалы. В начале карьеры на личный блог хороших статей много не напишешь, поэтому лучше идти, опять таки, в какой-нибудь хабр.

    То есть, получается, что в резюме (поначалу) лучше вкладывать ссылки на гитхаб и профиль хабре, чем на личный сайт.
    Ответ написан
  • Вычислить cos(x) в одну строку?

    qlkvg
    @qlkvg
    python backend developer
    для коллекции
    my_own_private_cosinus = __import__("math").cos
    Ответ написан
  • Вычислить cos(x) в одну строку?

    @MAGistr_MTM
    Учусь программировать
    def cos(x):import math; return math.cos(x)
    Как-то так в одну строку
    Ответ написан
  • Какую формулу комбинаторики использовать?

    jcmvbkbc
    @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    Посчитать количество нулей и единиц в исходном числе. Пусть это будут N0 и N1.
    Если нули не могут стоять спереди, значит спереди может стоять только единица. Если N1 > 0, уменьшить N1 на 1, иначе нет решений.
    Теперь нужно упорядочить N0 нулей и N1 - 1 единицу всеми возможными способами. Их будет (N0 + N1 - 1)!. Но поскольку все нули и все единицы одинаковы, то разных комбинаций будет в N0! * (N1 - 1)! раз меньше, (N0 + N1 - 1)! / (N0! * (N1 - 1)!). Это -- перестановки с повторениями. Для числа 100101 результат 10:
    100011, 100101, 100110, 101001, 101010, 101100, 110001, 110010, 110100, 111000.
    Ответ написан
  • Тесты при устройстве на работу?

    sim3x
    @sim3x
    Если базовая ставка вас устраивает и вы не против потратить свое время ради бонуса сверху, то почему нет

    Если же нижняя планка не озвучена заранее и при повышении зп на протяжении работы также потребуют таких тестов, то имо - лохотрон

    Ну и за 15 лет вы как бы уже должны сами раздавать советы по таким вопросам
    Ответ написан
  • Проблема с правами доступа, как решить?

    Softer
    @Softer
    Правильно выдает.
    В PATH пути через ":" пишутся, а не через пробел. И подозреваю что "/home/newus/.npm-global/lib/node_modules/pm2/bin" - это не бинарник. Я бы тоже отказался запускать директорию :)
    Ответ написан
  • Проблема с правами доступа, как решить?

    @anothere64
    Может как-то так?
    sudo env "PATH=$PATH:/usr/bin:/home/newus/.npm-global/lib/node_modules/pm2/bin" startup systemd -u newus --hp /home/newus
    Ответ написан
  • Есть ли смысл монтировать /home на другой диск?

    kotomyava
    @kotomyava
    Системный администратор
    В /homе, обычно, приложения не устанавливаются. Там хранятся настройки приложений(что может быть важно для скорости их запуска, хотя обычно не очень), файлы пользователя и.т.п.
    Если хочется потерять достоинства ssd для всего этого, то можно и смонтировать /home на hdd. Но лучше сделать хранилище для тяжёлых файлов не требующих быстрого доступа отдельно, а /home оставить на ssd всё же.
    Ответ написан
  • Как заменить текст с помощью регулярных выражений в jQuery?

    @daniil14056
    Регулярные выражения нужны при парсинге страницы, и извлечении информации, а jQuery это уже работа с dom этой страницы
    Вот ууделил времени, без JQuery изменяем текст, к примеру шаблон какой-то, пришедший с сервера и добавляем в документ.
    /**
     * Изменяет по шаблону все найденные совпадения
     * @param htmlcode    страница которую нужно изменить
     * @param listReplace  список значений для изменения найденных
     * @param pattern      паттерн регулярное выражения поиска
     * @param globalFind   нужно ли изменять все значения или только одно
     * @returns {*|string|void}  возращаяет изменненный текст html документа
     */
    function  replaceToken(htmlcode, listReplace,pattern, globalFind = true) {
        /**
         * Получает список токенов, которыми нужно заменить
         * Возращает заряженный генератор с списком по порядку выражений замены,
         * каждый раз будет возращать новое значение замены, список может быть прислан с сервера,
         * в случаее если найденных значений будет больше, то он не чего не измениn. Выражение "$&"
         * не изменяет найденое вхождение
         * @param list_tokens - массив- список значений которыми нужно заменить всякие 0x23423j343/
         * @returns {{generator: generaterSReplace}} возвращает генератор, который каждый раз будет возвращать следующие значения для замены 
         */
        function  loadGenerator(list_tokens) {
            return {
                generator: function* generaterSReplace() {
                    for(let i=0; i<list_tokens.length;i++)
                        yield list_tokens[i];
                    return "$&";
                }
            }
        }
    
        let generator=loadGenerator(list_tokens).generator();
        let reg;
        if(globalFind || listReplace instanceof Array)
            reg =new RegExp(pattern,["mg"]);
        else
             reg=new RegExp(pattern,["m"]);
    
        return res =htmlcode.replace(reg,function(str1,str2){
            return str1.replace(str2,generator.next().value);
        });
    
    }/****************TEST-------------------------TEST***********************************/
    var list_tokens=["1234567890","0987654321"];  // значения для замены, то есть html документ к примеру шаблон присланный с сервера или исходный текст самой страницы к примеру  
    //                  var htmlCode; 
    //                  $.get(document.location.href, function(data){htmlCode=data.data});
    let html='разные там <b>html</b>елементы. А вот и трока поиска: </b><b id="finish_kar_cri">0x61496a395F549XzxzxZ</b>....' +
        'a вот  еще один такой же элемент(предположим что там class а не id для массового поиска)'
        +'<b id="finish_kar_cri">0x323232323</b>...';
    
    let pattern='<b id="finish_kar_cri">(\\w+)</b>'; // ваша строка поиска в скобках значениыя ддля замены
    var res=replaceToken(html,list_tokens,pattern);   // возвращаем имененную строку
             $(document).append(res);        // console.log(res)// результат, измененная   текст с вашим токеном


    А это просто работа с самим текущим документов jquery
    // token[1] - и будет найденным текстом
    var ell=$("#finish_kar_cri");
    var lastVal=ell.text(); // запомнили старое значение
    ell.text("8496444");
    Ответ написан
  • Для использования питона, как серверного языка, всё ровно придется ставить nginx или apache?

    @Stormx480
    Python Backend Developer
    Статья на эту тему о деплое Django проекта от компании-хостера Digital Ocean

    Но если коротко говорить то nginx - это веб-сервер, который может обрабатывать HTTP-запросы и может отправлять его на сервер WSGI, и сервер WSGI обрабатывает приложение django.
    У джанго есть встройка fastcgi, но тот же gunicorn как представитель WSGI-подобных серверов лучше потому что его родной
    почитайте о маршрутизации запросов от клиента к серверу, и решите какие методы для вас лучше. Не обязательно использовать именно nginx.
    spoiler
    "Все сводится к цели проекта Django и повышению эффективности, связанному с повторным использованием (в отличие от повторного использования колеса).

    Заявленная цель для Django - предложить инфраструктуру веб-приложений, которая обеспечивает быструю разработку и минимальный код. Оригинальный tagline был "основой веб-приложений для перфекционистов с предельными сроками".

    Эта цель может быть выполнена с помощью простого однопоточного веб-сервера, который просто упрощает разработку и тестирование.

    Цель Apache httpd, Nginx, IIS и т.д., с другой стороны, - предлагать исключительно масштабируемые и эффективные веб-серверы. Эти приложения очень настраиваются, поскольку все приложения отличаются друг от друга, и ни один из них не подходит для всех. Они также требуют различного опыта для проектирования, внедрения и обслуживания.

    Поэтому очень важно, что с ограниченными ресурсами (время разработчиков) команда Django предпочла сосредоточиться на структуре веб-приложений и оставить готовый веб-сервер к другому проекту."
    Ответ написан