Задать вопрос
  • Как исправить ошибку "TypeError: 'tuple' object cannot be interpreted as an integer"?

    Вот так не правильно. Оно работать не будет, по очевидной причине
    if keys[pygame.K_x, pygame.K_s, pygame.K_w]:
    Надо вот так:
    if keys[pygame.K_x] or keys[pygame.K_s] or keys[pygame.K_w]:
    Ответ написан
    Комментировать
  • Легально ли скачать модификацию через торент?

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

    СУБД решает следующие проблемы:
    1. Сетевой доступ к данным.
    СУБД позволяет хранить данные на отдельном сервере.
    Файлы - нет.

    2. Эффективное хранение данных.
    Большинство СУБД хранит данные в двоичном виде, что более эффективно и удобно для компьютера.
    Файлы - нет.

    3. Конкурентный доступ к данным.
    СУБД позволяет работать с данными одновременно разными клиентами. И это не приведёт к непредсказуемым проблемам.
    Файлы - нет.

    4. Индексирование данных для эффективного поиска.
    СУБД сама создаёт некоторые простые индексы и даёт возможность создать новые, чтобы поиск был быстрым. Файлы - нет.

    5. Горизонтальное масштабирование.
    СУБД позволяет тебе поднять несколько экземпляров базы данных не скольких серверах, и распределить между ними нагрузку.
    Файлы - нет.

    6. Контроль целостности.
    СУБД гарантирует, что твои данные всегда будут читаемыми. У тебя никогда не возникнет ошибка "Invalid JSON".
    В файлах таких гарантий нет.

    7. Удобный интерфейс.
    СУБД предлагает тебе удобный API для выполнения различных запросов на поиск и изменение данных.
    Файлы такой интерфейс не дают.

    8. Удобное администрирование.
    СУБД имеет также интерфейс для отслеживания своего состояния и настройки под ситуацию.
    Имеется множество инструментов для профилирования производительности БД и бэкапов.
    Файлы ты никак не сможет администрировать.

    Естественно, все эти проблемы ты, теоретически, сможешь решить самостоятельно. Но тогда у тебя в результате получится новая СУБД, а не просто голые json-файлы.
    Ответ написан
    Комментировать
  • Какие ограничения ввела QT после 24-го февраля?

    Да, если лицензия уже есть, то разрабатывать также можно.
    Ответ написан
  • Как парсить авито?

    Авито очень много вкладывает в защиту от парсинга, так что никак (в общем случае)
    Ответ написан
  • Как создать Глобальную переменную PHP?

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

    То что ты описываешь, похоже на то как работают кэши.
    Ты можешь поднять Redis, делать к нему запрос.
    Если данных по ключу нет - вычисляешь их как-то и кладёшь в Redis, указывая TTL 10 минут.

    Аналогично ты можешь сделать и с любой другой, более привычной СУБД
    Ответ написан
    Комментировать
  • Visual Studio Code много не отслеживаемых изменений в Системе управления версиями?

    Ты не в той директории сделал git init.
    Удали папку .git и попробуй ещё раз
    Ответ написан
    Комментировать
  • Как сделать VPN сервер для iOS клиентов на 10000 пользователей?


    откуда лучше брать сервера?

    Поднять свои.


    Получается должен быть какой-то Бекенд, на чём его писать?

    На том, на чём умеешь.

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

    Ну тебе с твоего бэкенда надо будет собирать метрики по задержкам, нагрузке на CPU, и RAM.
    Решений этой задачи много. Гугли "сбор метрик с бэкенда".

    Автоматическое масштабирование - тема отдельная и достаточно сложная.

    Может быть есть уже какой-то готовый сервис который предлагает готовое решение

    Да, есть. Многие vpn-провайдеры имеют так называемую услугу "white label" - они сами делают клиент с твоим логотипом, названием, и может даже дизайном, но за инфраструктуру отвечать будут уже они.

    Быстро и по сути ноль головной боли, если у тебя задача просто сделать свой vpn-сервис
    Ответ написан
    Комментировать
  • Как называть файлы, папки и тд, есть ли какие нибудь правила?

    Так чтобы было понятно и правильно

    Точно не стоит называть файлы 123, ABC, qwe, xxx

    Скорее всего для твоего языка/Фреймворка уже есть какие-то рекомендации - вот им для начала и следуй
    Ответ написан
  • Существуют ли API с рецептами блюд на русском языке?

    А если их нет, то как можно выйти из этой ситуации?

    Варианты:
    1. Написать свои рецепты (например набрать из книг или руками вытащить из других сайтов)
    2. Спарсить рецепты с других сайтов (очень некрасиво так поступать, на самом деле)
    3. Взять тот API с рецептами на английском и перевести. (можно перевести сначала автоматически, а потом вручную провалидировать)

    Все варианты подразумевают, что API ты будешь делать свой, а способы лишь дают варианты, как изначально можно заполнить твою базу данных.

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

    Владельцу же сайта с рецептами нет никакого смысла делать бесплатный открытый API:
    1. Это дополнительная нагрузка на сервера, которая не приносит рекламного трафика.
    2. Это отличное подспорье для конкурентов, так как только им и нужен такой API
    Ответ написан
    3 комментария
  • Фабричный метод, как использовать?

    1. Это не фабричный метод, а фабрика
    2. При наличии DI обычно он не нужен, как правильно вы заметили. Можно сразу засунуть нужный объект.

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

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

    Так вот все вышеописанное работает хорошо но до того момента как наш комп не уйдет в спящий режим, и тогда , примерно через 30 сек вебсокет соединения разрывается

    По вполне понятной причине:
    Вебсокет работает поверх TCP. Когда в рамках TCP-соединения не передаются никакие сообщения - оно разрывается, причём вроде аж на уровне провайдера.

    Смысла держать вебсокет работающим даже когда компьютер не работает нет, как и технической возможности.
    Просто учитывай это и поднимай вебсокет заново, если он вдруг разорвался.
    Можно попутно ещё запросить сообщения, которые были отправлены с момента разрыва (например с даты последнего полученного сообщения)
    Ответ написан
    Комментировать
  • Как в Вконтакте с помощью vk_api.bot_longpoll сделать реф ссылку и отслеживать кто переходит и т. д?

    С помощью bot_longpoll - никак.
    За реферальные ссылки должен отвечать тот сервис, на который предполагается переход, либо сервис для сокращения ссылок.
    Вообще, у vk есть встроенный API для vk.cc: https://dev.vk.com/method/utils.getShortLink
    Ответ написан
    Комментировать
  • Какой уровень знаний в C# нужен для разработки игры на Unity?

    C# нужен именно для такого проекта, карьеру разработчика особо начинать не хочу.

    Ну тебе нужно уверенно знать C# на уровне хотябы Junior+.
    Ты должен:
    1. Знать синтаксис.
    2. Понимать ООП (наследование, полиморфизм. Как работают public/private-модификаторы. Как работает static)
    3. Понимать паттерны проектирования. Какие бывают и какие проблемы решают.
    4. Уметь читать сообщения об ошибках и находить решение им.
    5. Уметь использовать debugger для отладки программы и поиска источника ошибки.

    Примерно с таким багажом ты сможешь начать писать свою игру и не задавать вопросы уровня:
    https://qna.habr.com/q/1175066
    https://qna.habr.com/q/1172476
    https://qna.habr.com/q/1170852
    https://qna.habr.com/q/1170848
    https://qna.habr.com/q/1168196
    https://qna.habr.com/q/1167392
    Ответ написан
    Комментировать
  • Как приложение на Android считывает SMS?

    Вот этот буквенно-цифровой шифр - это цифровая подпись.
    При её формировании, на бэкенде также используется хэш приложения.
    Благодаря этому Android может подтвердить подлинность этой СМС, и что она предназначена именно для того приложения, которое хочет его прочитать.
    https://developers.google.com/identity/sms-retriev...

    PS: Вопрос про этот API уже несколько раз на тостере задавали, но тут поиск такой стрёмный, что хрен найдёшь.
    Ответ написан
    1 комментарий
  • Как доказать опыт работы фронтендщика при переезде за границу?

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

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

    А при трудоустройстве у тебя есть CV, портфолио, собеседования.
    Ответ написан
    Комментировать
  • Генерация уникального рандомного значения?

    Вспомнил олимпиадное программирование.
    Посмотрел по коду:
    Для генерации случайной строки размером 10 используется словарь из 9 символов
    => информации в этой строке около 31.7 бит. Что даёт нам 3486784401 разных вариантов. Что спокойно умещается в UInt32
    => задачу можно упростить до генерации ОДНОГО числа в этом диапазоне с последующим форматированием в эту десятисимвольную строку.

    Дополнительно можно немного оптимизировать, если для гарантии уникальности использовать не список, а hashset.
    А скорость генерации строки и требуемую память - путём выделения буфера на 10 символов заранее.
    И ещё немного оптимизации, путём создания одного экземпляра Random
    Вот такая реализация получилась:
    public sealed class UniqueStringGenerator
    {
        private const long MAX = 3486784401;
    
        private readonly Random _random;
        private readonly HashSet<long> _history;
    
        public UniqueStringGenerator(int seed)
        {
            _random = new Random(seed);
            _history = new HashSet<long>();
        }
    
        public UniqueStringGenerator()
        {
            _random = new Random();
            _history = new HashSet<long>();
        }
    
        public string Next() => Format(NextNumber());
    
        public void Reset()
        {
            _history.TrimExcess();
            _history.Clear();
    
        }
    
        private long NextNumber()
        {
    
            if (_history.Count >= int.MaxValue)
            {
                throw new InvalidOperationException("Variants exceeded. Please reset");
            }
            var next = _random.NextInt64(0, MAX);
            while (_history.Contains(next))
            {
                next = _random.NextInt64(0, MAX);
            }
            _history.Add(next);
            return next;
        }
    
        private static string Format(long number) => string.Create<long>(10, number,
            static (span, number) =>
            {
                 // Алгоритм по-лучше придумать не смог.
                 // Проходимся по каждому биту числа, понемногу сужая выбор между числами в словаре.
                const string DICTIONARY = "123456789";
                for (var i = 0; i < span.Length; i++)
                {
                    var range = 0..DICTIONARY.Length;
                    while (!range.Start.Equals(range.End.Value))
                    {
                        var length = range.End.Value - range.Start.Value;
                        var step = length / 2;
                        if (step == 0)
                        {
                            break;
                        }
                        if ((number & 1) == 0)
                        {
                            range = range.Start..(range.End.Value - step);
                        }
                        else
                        {
                            range = (range.Start.Value + step)..range.End;
                        }
                        number >>= 1;
                    }
                    span[i] = DICTIONARY[range.Start];
                }
            });
    }

    100к строк генерирует менее чем за секунду на моём ноуте.
    Хотя есть два недостатка (достаточно серьёзных):
    1. "1" и "9" - две наиболее редкие цифры
    2. последние две цифры - всегда единицы.
    Ответ написан
    Комментировать
  • Где найти классификацию и теорию компьютерных игр?

    По геймдизайну: https://habr.com/ru/post/463805/
    По разработке движка: https://habr.com/ru/company/blog/384229/
    Ответ написан
    Комментировать
  • Как получить прошлые версии сайтов на githab.io?

    Просто тебе нужно клонировать не сайт, а репозиторий.
    Вот нужный тебе репозиторий: https://github.com/morphIsmail/video_course_basic
    git clone git@github.com:morphIsmail/video_course_basic.git

    А дальше через git checkout откатываешься
    Ответ написан
    Комментировать