Задать вопрос
  • Как puppeteer заставить работать через socks5 прокси?

    Поставьте локальный прокси, который не будет требовать авторизации и пробрасывать на родительский, например в 3proxy конфигурация что-нибудь типа

    auth iponly
    fakeresolve
    internal 127.0.0.1

    allow *
    parent socks5+ proxyhost 8080 user password
    socks -p1080

    и используйте в браузере 127.0.0.1 1080.
    P.S. но вообще в браузерах лучше использовать http/https прокси, в них хендшейк короче.
    Ответ написан
    2 комментария
  • Почему puppeteer js при парсинге не дожидается селектора, который отображается в браузере?

    @EVOSandru6 Автор вопроса
    await page.waitForSelector('.textdivresp').then(() => {
            console.log('textdivresp_ololo');
        });
    
        await page.evaluate(() => {
            let elements = document.getElementsByClassName('textdivresp');
            elements[1].click()
        });
    Ответ написан
    Комментировать
  • Курс по Vue.js с тяжелым проектом?

    tema_sun
    @tema_sun
    Ситуация такова, что устроился в компанию...


    Вы сейчас проходите самый лучший курс. Мало того, вам за это еще и платят!
    Ответ написан
    Комментировать
  • Курс по Vue.js с тяжелым проектом?

    Kozack
    @Kozack Куратор тега Vue.js
    Thinking about a11y
    Ни один курс вам тут не поможет. Только практика. Теория хороша, но она должна быть к месту.
    Изучайте проект. Нашли проблему — гуглите или спрашивайте про способы решения.

    Не знаете как организовать код?
    Вам помогут:
    https://vuejs.org/v2/style-guide/
    Читайте про паттерны проектирования какие плюсы минусы у каждого, где и какой стоит применять. И не только для Vue а для всего JS.

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

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

    Только такого рода обучение "Найти проблему — найти решение" даёт какой-либо результат. И это не зависит от "размеров" проекта.

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

    UPD
    С большими и старыми проектами есть такое дело, что порой, самая упоротая дичь, которая там может быть написана — написана не просто так. Учитывайте, что то что вы сейчас собираетесь исправлять, существует по какой-то причине и не всегда очевидной. Возможно 10 месяцев назад была очень узко направленная задача (учто-то в духе, страница для печати отчета бухгалтерами), решить которую можно было только огромным костылем. И сейчас все о ней уже забыли. И убрав этот костыль вы можете сломать что-то. И хорошо если это всплывёт сразу, а не ещё через 10 месяцем.
    Ответ написан
    Комментировать
  • Курс по Vue.js с тяжелым проектом?

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

    Лучший учитель - практика. Применяйте новые знания на практике.
    От того, что вы сделаете "большой проект" под копирку по уроку, мозгов не прибавится. Придумайте что-то свое и в путь
    Ответ написан
    2 комментария
  • Three.js или Unity?

    svaa1982
    @svaa1982
    Web разработчик с трёхмерным уклоном
    Вопрос сложный, ибо пока в Unity нету нормальной поддержки WebGL, three.js же изначально затачивается на работу в браузере. Всё определяется вашей готовностью ждать и сложностью проекта, который вы намереваетесь сделать. Можете посмотреть другие движки, например blend4web, он более продвинутый чем three.js, но требует денег в случае если вы захотите разрабатывать коммерческие решения.
    Ответ написан
    Комментировать
  • Как верстаются блоки со сложным вырезом?

    RAX7
    @RAX7
    на SVG вырез можно сделать хоть в форме котенка
    Ответ написан
    4 комментария
  • Как разрешить ввод только 2х знаков после запятой?

    0xD34F
    @0xD34F Куратор тега Vue.js
    val => (val.split('.')[1] || '').length < 3 || 'Не более двух знаков после запятой'
    Ответ написан
    Комментировать
  • Крестики нолики 5x5 с непобедимым искусственным интеллектом?

    dummyman
    @dummyman
    диссидент-схизматик
    https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B5%D...
    https://ru.wikipedia.org/wiki/%D0%93%D0%BE%D0%BC%D...

    Просто выберите для себя версию правил, а игруху с исходными кодами найдете на любую платформу

    Есть еще турнир AI по гомоку
    Ответ написан
    Комментировать
  • Как проверить совместимость железа с ubuntu?

    Compolomus
    @Compolomus
    Комполом-быдлокодер
    Да убунту у меня поднялась даже после смены всего железа, без переустановки, тогда как винда сдохла) , а кто бы мог подумать лет 10 назад
    Ответ написан
    2 комментария
  • Как проверить совместимость железа с ubuntu?

    @nukler
    местный юродивый
    Не партесь. у меня бубунта пережила 3 переезда, в том числе с Интел на Амд, ничего не отвалилось, никуда ничего не делось.
    Если уж совсем прижмет, поменяйте дистр на тот который Вам больше понравится.
    Ответ написан
    1 комментарий
  • Как работает алгоритм минимакс?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    При проходе по ветвям дерева, просот скипаются лишние шаги по определенным критериям, с ограниченной глубиной.

    Например первый шаг - у нас выбор из двух вариантов.
    Второй шаг - выбор из четырех вариантов
    Третий шаг - выбор из восьми вариантов.

    Можно перебрать все варианты, а можно пропускать некоторые из них

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

    Тут все зависит от того, как правильно расставишь стоимость промежуточных выборов, чтобы определять какие ветки пропускать, с какими продолжать работать.
    Ответ написан
    Комментировать
  • Стоит ли переходить с Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Опять 25. Я уже, наверное, в сотый раз пишу, что на фрилансе шансов нет, если не дорос в офисе до мидла. Студент должен открыть hh.ru, поискать вакансии программистов в своё городе, а потом изучать то, что для них требуется.
    Ответ написан
    2 комментария
  • Видел кто-нибудь быстрый алгоритм динамической генерации бесконечного пещерного лабиринта?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Условие простое: чтобы всегда был выход нужно сохранять зазор разворота - минимум 2 тоннеля рядом. Разворот - делать вдоль своего "тела" наружу, чтобы не упереться в тупик.
    (Т.е., тут алгоритм предотвращения запутывания змейки)
    Ответ написан
    Комментировать
  • Как найти эффективное решение задачи (Java)?

    @krka92
    Джаву, увы, не знаю
    procedure WriteCheckLine(Len: Integer; Offset: Byte);
    var i: Integer;
    begin
      for i := Offset to Len - 1 + Offset do
      begin
        if i and 1 > 0 then Write('*')
        else Write('-');
      end;
      WriteLn;
    end;
    
    procedure WriteCheckBoard(N: Integer);
    var i: Integer;
    begin
      for i := 0 to N - 1 do WriteCheckLine(N, i and 1);
    end;


    или без вызова
    procedure WriteCheckBoard(N: Integer);
    var i, j, Offset: Integer;
    begin
      for i := 0 to N - 1 do
      begin
        Offset := i and 1;
        for j := Offset to N - 1 + Offset do
        begin
          if j and 1 > 0 then Write('*')
          else Write('-');
        end;
        WriteLn;
      end;
    end;


    Как удобнее будет
    Ответ написан
    Комментировать
  • Как найти эффективное решение задачи (Java)?

    jamakasi666
    @jamakasi666 Куратор тега Java
    Просто IT'шник.
    Виктор Мальков,
    еще в копилку, не короче но вызовет приступ у ненавистников лямбд и стримов
    IntStream.rangeClosed(1, n).forEach(i -> {
                IntStream.rangeClosed(1, n).forEach(j -> 
                    System.out.print((i + j) % 2 == 0 ? '*' : '-'));
            System.out.println();});


    Еще изврат, правда будет работать только с нечетными числами но зато в один цикл! =).
    IntStream.rangeClosed(1, n*n).forEach(i -> System.out.print(i % n != 0 ? (i % 2==0 ?'*':'-') : '\n'));
    Ответ написан
    Комментировать
  • Оптимизировать код или как выделить всю вычислительную мощность пк на его выполнение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Первое, что бросается в глаза - это многократное копирование массива. Представьте, что при сортировке мы бы после каждых двух-трех перестановок делали бы полный дубликат массива. Это же ужас! И это слабое место, постоянное перевыделение памяти больших размеров.

    Второе, что тоже важно - это сложность O(N*N). В вашем случае это критично, потому что много элементов в исходном массиве.

    Предлагаю немного изменить алгоритм. Делаем одно прохождение, но немного увеличиваем потребление памяти, в которой храним интервалы. Таким образом, мы избавляемся от постоянного копирования массива, а также уменьшаем сложность примерно до O(N).

    И маленькая оптимизационная хитрость - поиск интервала происходит по индексу, то есть O(1). Нужно немного поразмыслить, чтобы до этого догадаться, но в целом всё просто.
    Код
    <?php
    $arr = [100,125,75,175,25,300,275,325,375];
    $step = 50;
    
    $b = []; //-1 - deny, 0 - not set, 1 - has interval
    $int = []; //intervals if necessary 
    $step2 = intdiv($step,2);
    $arr = array_values(array_filter($arr, function($v) use ($step2,&$b,&$int) {
        $i = intdiv($v,$step2);
        $mod = $v % $step2;
        $res = true;
        if (isset($b[$i])) {
            if ($b[$i] === -1) $res = false;
            elseif ($mod < $int[$i][0] or $mod > $int[$i][1]) $res = false;
        }
        $b[$i] = -1;
        $b[$i+1] = -1;
        $b[$i-1] = -1;
        if (!isset($b[$i+2])) {
            $b[$i+2] = 1;
            $int[$i+2] = [$mod,$step2];
        } elseif ($b[$i+2] === 1) {
            if ($int[$i+2][0] < $mod) {
                $int[$i+2][0] = $mod;
                if ($int[$i+2][0] >= $int[$i+2][1]) $b[$i+2] = -1;
            }
        }
        if (!isset($b[$i-2])) {
            $b[$i-2] = 1;
            $int[$i-2] = [0,$mod];
        } elseif ($b[$i-2] === 1) {
            if ($int[$i-2][1] > $mod) {
                $int[$i-2][1] = $mod;
                if ($int[$i-2][0] >= $int[$i-2][1]) $b[$i-2] = -1;
            }
        }
        return $res;
    }));
    
    var_dump($arr); // [100, 175, 25, 300, 375]
    ?>

    Переписав алгоритм на С++, получите дополнительно 50-кратное увеличение скорости.
    Ответ написан
    3 комментария
  • Двумерный массив в виде шахматной доски?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    if((Math.floor(i*0.25)+Math.floor(j*0.25))%2 == 0) mas[i][j] +=1;
    Ответ написан
    1 комментарий
  • Как настроить gitlab ci + vds?

    @rionnagel
    ковырятель
    Для этого вам надо установить на vds gitlab-runner, прилинковать его к гитлабу через gitlab-runner register. На gitlab'е уже описывать нужное в yml файле ci/cd.
    Ответ написан
    Комментировать