• С чего начать в 30 лет?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Фундаментальная проблема - в игрострой стоит очередь фанатов с горящими глазами. Людей, которые пишут игры, играют в игры, моддят игры, хакают игры..., начиная с возраста, когда они смогли дотянуться до клавиатуры (как ваш покорный слуга). При этом, у них столько мотивации, что они могут сами поставить себе задачу, сами нагуглить все, что нужно (Спасибо дяде Немнюгину за его учебник. Это все что нужно знать о DOS, чтобы закодить dOOm) и сами все напишут и нарисуют (работая над этим сутками. Не потому что над душей стоит босс с воплями о лишении премии, а потому что им это интересно).

    И вот теперь, Андрей, который уже устал хочет встать в очередь высоко мотивированных конкурентов и попросить себе оффер. Каковы его шансы на успех?

    В играх есть много специализаций программирования - хотите графику, придется учить одно (причем на 2d и 3d это одно будет разное), хотите игровую логику и скриптинг - это номер два, хотите системную часть и бэкенд - это будет третье.

    Для универсального развития, нужно начинать с простых фиговин вроде тетриса, арканоида, бильярда и прочего (в которых однако есть все столпы игростроя - графика + логика + системный движок, можно и добавить сеть, если подумать) и потом наращивать сложность - делать платформер или RTS.
    Ответ написан
    4 комментария
  • Как спарсить сайт, где есть авторизация?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Сначала надо авторизоваться, а потом парсить сайт
    Ответ написан
    2 комментария
  • Есть ли какие-то онлайн компиляторы кода Python?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Есть. Называются VDS (серваки, простыми словами). Арендуете, подключаетесь по ssh и кодите на здоровье.
    Вариантов - тьма. Гуглятся легко
    Ответ написан
    Комментировать
  • Почему Requests не пропускает сертификат?

    AKotenko
    @AKotenko Автор вопроса
    None
    Решено! Понижение версии python с 3.10 до 3.6 . Не было поддержки TLS v1
    Ответ написан
    Комментировать
  • Возможны ли подобные технические реализации моментов в мобильной разработке игр на Unity?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Но в ваших примерах же нет никакой "фоновой активности", тупая проверка при запуске если полдень, то здание построено.
    Ответ написан
    Комментировать
  • Как пустить часть трафика через VPN?

    Vindicar
    @Vindicar
    RTFM!
    Есть два подхода. В обоих случаях тебе нужен список заблокированных IP, его можно взять на антизапрете, например.
    Дальше вопрос, как пускать трафик.
    1. На хабре был материал про динамическую подгрузку маршрутов через BGP. Плюс - работает с любыми протоколами, и не требует дополнительной настройки со стороны проксируемого ПО. Минусы - ощутимо сложнее в понимании, на мой взгляд, да и с кроссплатформенностью могут быть проблемы. В статье приведена реализация на роутере Mikrotik.
    2. Использовать файл proxy.pac. Его можно сгенерировать скриптом типа такого:
    #!/bin/bash
    #!/bin/bash
    DNS_SERVER=8.8.8.8
    BLACKLIST_URL="http://antizapret.prostovpn.org/iplist.txt"
    #куда класть файл proxy.pac
    PACDIR=/var/www/html
    TMPLIST=/tmp/iplist.txt
    #домены, которые нужно пускать через прокси независимо от содержимого iplist.txt
    DOMAINS=(\
    rutracker.org \
    facebook.com \
    facebook.net \
    fbcdn.net \
    twitter.com \
    twitter.co \
    t.co \
    twimg.com \
    twitpic.com \
    periscope.tv \
    pscp.tv \
    )
    #качаем чёрный список
    wget -q --tries=10 -O "$TMPLIST" "$BLACKLIST_URL"
    # вытаскиваем IP наших прописанных доменов
    declare -a EXTRAIPS=()
    for domain in "${DOMAINS[@]}"
    do
            dig A "$domain" +short @$DNS_SERVER | grep -v '\.$' >>"$TMPLIST"
    done
    #в чёрном списке есть отдельные IP и есть подсети
    #также чёрный список очень длинный, поэтому кодируем его более компактно.
    IPLIST=`grep -Ex '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' "$TMPLIST" | awk '/^[0-9]+/ {split($1,b,/\./); printf("0x%02x%02x%02x%02x,", b[1],b[2],b[3],b[4]);}'`
    SUBNETLIST=`awk '/[0-9.]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/ {split($1,p,/\//); printf("[\"%s\", %s], ", p[1], p[2]);}' <"$TMPLIST"`
    #генерируем proxy.pac по шаблону
    #он проверяет домен на вхождение в фиксированные домены, а потом IP по списку.
    function templatePAC {
            NAME=$1
            shift
            DMNLIST=("$@")
            cat >"$PACDIR/$NAME" <<EOF
    function FindProxyForURL(url, host) {
      var domainblacklist = [
    EOF
            for d in "${DMNLIST[@]}"
            do
                    echo "  '$d'," >>"$PACDIR/$NAME"
            done
            cat >>"$PACDIR/$NAME" <<EOF
      ];
      var ipblacklist = [ $IPLIST ];
      var subnetblacklist = [ $SUBNETLIST ];
    
      function endsWith(str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
      }
      function numberToMask(n) {
        var m=[0,128,192,224,240,248,252,254,255];
        var r=[];
        for (var i=0; i<4; i++) {
          var p = (n > 8) ? 8 : n;
          r[i] = m[p];
          n -= p;
        }
        return r.join(".");
      }
      function maskMatch(ip, mask) {
        var m = numberToMask(mask[1]);
        return isInNet(ip, mask[0], m);
      }
    
      var blocked = false;
      for (var i=0; !blocked && (i<domainblacklist.length); i++)
        blocked = blocked || ((host == domainblacklist[i]) || endsWith(host, '.'+domainblacklist[i]));
      if (!blocked) {
        var ip = dnsResolve(host);
        for (var i=0; !blocked && (i<subnetblacklist.length); i++)
          blocked = blocked || maskMatch(ip, subnetblacklist[i]);
        blocked = blocked || (ipblacklist.indexOf(convert_addr(ip)) != -1);
      }
      if (blocked)
        return "PROXY ТУТ_ТВОЙ_ПРОКСИ:ПОРТ";
      else
        return "DIRECT";
    }
    EOF
    }
    # генерируем файл
    templatePAC proxy.pac "${DOMAINS[@]}"
    
    rm -f "$TMPLIST"

    Тогда можно отдавать этот proxy.pac любым веб-сервером (но лучше внутри VPN - если VPN не работает, то смысл в файле?), и настроить браузер на его использование.
    Минусы: работает только с браузерами, требует наличия вебсервера и полноценного прокси-сервера внутри VPN-сети (т.е. просто арендованный VPN не подойдёт, нужен VPS). Но мне показалось это проще в понимании, чем возня с BGP, да и требуется только наличие современного браузера и VPN клиента, без привязки к роутеру. Можно хоть на ноуте настроить, как я сделал.
    Ответ написан
    Комментировать
  • Как в HTML сначала получить текст из тэга input, а потом перенаправить используя Flask?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Достаточно прочитать раздел quickstart документации, чтобы узнать, что нужно присвоить инпутам имена, обернуть их тегом form, а в обработчике формы извлечь параметры из объекта request.
    Ответ написан
    Комментировать
  • Как спарсить сайт, чтобы парсер работал под моим аккаунтом?

    Vindicar
    @Vindicar
    RTFM!
    Почти наверняка сайт использует cookies для хранения сессии, т.е. чтобы понять, что два или более запроса пришли от одного и того же пользователя.
    Большинство библиотек для работы с HTTP предоставляют механизм хранения cookies. Та же requests, например.
    Тогда выясняешь, какой запрос нужно сделать к сайту, чтобы залогиниться, и делаешь этот запрос. Потом в рамках той же сессии (читай документацию на используемую библиотеку!) выполняешь нужные тебе запросы к страницам.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы без выполнения @dp.message_handler(commands='Висельница') - start_game() не выполнялась @dp.message_handler()-game?

    Vindicar
    @Vindicar
    RTFM!
    Это называется машина состояний. Упрощённо, тебе нужно хранить для каждого участника сведения о том, играет он или нет. Например, словарь, где ключ - ID участника а значение - состояние игры. Если ID нет в словаре, то участник не играет.
    Решение Kvason плохо тем, что оно работает только для одного собеседника, т.е. либо все играют, либо никто не играет.
    Ответ написан
    1 комментарий
  • Python (print) как обработать конец вывода?

    @PavelMos
    Если нужно печатать список с разделителем, например, "---", то в питоне есть функция join
    stroka=('----').join(spisok)
    выдаст строку из элементов, разделённых ----
    Ответ написан
    1 комментарий
  • Как сделать текст копирующимся кликабельно?

    iggor-markin
    @iggor-markin
    Python Developer
    Оберни текст в тег code и добавь parse_mode="HTML"
    Ответ написан
    1 комментарий
  • Как можно делать сразу несколько действий на одной странице с помощью библиотеки requests питон?

    Shurik24
    @Shurik24
    Обычный программист самоучка
    Хочешь это сделать на реквестах?
    Зайди на сайт парси данные суп в помощь (bs4)
    Вводить данные в поле регистрации? неее это не возможно, отследи через dev tool какие отправляться запросы на сайт после чего повтори действия через реквест
    Ответ написан
    4 комментария
  • Валидация Flask?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Валидация не имеет вообще никакого отношения к безопасности. Она относится исключительно к бизнес-логике.
    Ответ написан
    Комментировать
  • Как повысить свои навыки в построении архитектуры сложных приложений?

    bingo347
    @bingo347
    Crazy on performance...
    Если по теории, то мне в свое время вот эта книга помогла:
    https://www.litres.ru/robert-s-martin/chistaya-arh...

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

    Через несколько месяцев прочел еще раз, анализируя все затупы, что записал за это время в блокнот. После прочтения начал потихоньку рефакторить в существующих проектах места, которые уж очень жить мешали.

    Еще через пол года прочел третий раз, опять же с оглядкой на личный опыт. И тут я кажется уже совсем въехал. По крайней мере многие проблемы с организацией взаимодействия между компонентами стали разрешаться. И вообще появилось достаточно четкое понимание, как структурировать приложение и где разбивать его на компоненты.
    Ну и после 3 прочтения еще помог момент: мне дали с нуля проектировать новое, достаточно крупное приложение на Rust. Притом заказчик кричал "микросервисы - это круто, хочу, хочу, хочу", а тимлид мне сказал "давай монолит, но так чтоб потом легко было распилить, а то все сроки про**ем". Вот тут прямо вообще понимание пришло. Ну и плюс в Rust архитектурные компоненты очень хорошо ложатся на отдельные крейты (это такая единица компиляции в Rust), а компилятор в принципе не дает делать циклические зависимости между крейтами.

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

    Fepler
    @Fepler Автор вопроса
    Вот он нужный ответ, спасибо MinTnt :3
    l = [("a", [1, 3, 5, 6, 7]), ("b", [1, 2, 3, 4, 5]), ("c", [2, 4, 6, 8])]
    
    print([x for x in l if all(not i % 2 for i in x[1])])
    Ответ написан
    Комментировать
  • Как обработать двухфакторную аутентификацию Google?

    SoreMix
    @SoreMix
    yellow
    2fa гугла (да и не только) по сути является просто секретной строкой, на основе которой генерируются коды. Установите библиотеку pyotp, достаньте вашу секретную строку (обычно либо сайт ее даёт в чистом виде, для использования в других приложениях, либо даёт хотя бы возможность сгенерировать QR код, который можно прочитать камерой и из него достать строку; альтернативный вариант - открыть логи запросов в браузере и сгенерировать новый 2fa код, он где нибудь отразиться в истории), далее просто делаете
    import pyotp
    code = pyotp.TOTP(secret_line).now()

    И отправляете этот код через requests, точно так же как и отправляет обычный браузер
    Ответ написан
    1 комментарий
  • Как "войти" в мобильную разработку?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    От пары месяцев при наличии опыта разработки в смежных сферах (php, JS, Java) до пары лет, если нужно осваивать базовый синтаксис языков программирования (а для приложения заказа пиццы желательно пару языков знать).
    Литература - справочники по синтаксису языков (для примера Swift, Java и php), справочники по работе с базами данных, справочники по SDK iOS и Android. Вся литература доступна бесплатно на сайтах для разработчиков Google и Apple.

    Если думаете, что приложений нет, потому что не дошли руки - то, скорее всего, ошибаетесь. Разработка хорошего приложения дело достаточно затратное, тот же заказ пиццы при добавлении пары красивостей легко улетит за 10 тыс. долларов, большинство мелких кафе просто не готовы вкладывать такие деньги.
    Ответ написан
    Комментировать
  • (selenium) driver.find_element_by_xpath не находит нужный элемент что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Хотя этот (//html/body/div[99]/span) xpath путь точно существует

    Почему так решили?
    Давайте вместе попробуем перейти по этому пути.

    html/body/div[99]/span

    Открываем html/body
    61de9c50bef3c168832644.jpeg

    Открываем 99-й div
    61de9cb490084202222069.jpeg
    Но их всего 5. Так что не существует такого XPAth, создавайте новый, в хроме можно даже через райтклик скопировать Xpath
    Ответ написан
    Комментировать
  • Что не так с if'ом?

    if a == 3 or b == 3 or c == 3
    и далее по тексту.
    Ответ написан
    1 комментарий