• Как искать работу game developer?

    terrier
    @terrier
    Всем привет.

    Хэллоу.
    Второй месяц изучаю C++, сейчас пишу простенькую игру на sfml, потом в планах UE4.

    Хорошее начало, однако вы должны понимать, что пока что ваш уровень в C++ околонулевой.
    Периодически захожу на разные сайты смотреть вакансии и там всё грустно - их почти нет!

    Ну это просто неправда. https://gamedev.ru/job/forum/?vacancy - я вот здесь вижу 4 C++ - вакансии только на первой странице, то есть за вчера-сегодня. И в целом вакансий достаточно.
    Поэтому хотел спросить, реально ли вообще найти работу гейм девелопером

    Конечно.
    (а тем более без коммерческого опыта)

    Упс, тут небольшая проблемка. Опыт нужно приобрести. Смотрите - с нормальным знанием C++ и внятным опытом в UE хотя бы в пару лет ( пусть даже некоммерческим ) проблема трудоустройства в геймдеве стоять перед вами не будет. Вывод - продолжайте изучать C++, осваивайте UE, пишите прототипы, не комплексуйте и, когда набьете скиллы, сможете поучаствовать в геймдев-движухе. Можно пока присоединиться к какой-нибудь любительской разработке для опыта.
    Пока не прокачаетесь, ну, наверное, нужно будет что-то зарабатывать - есть смысл попробовать геймдев-индустрию на ощупь, устроившись тестером, например. Может у вас сразу слетят розовые очки и вы сразу предпочтете вэб.
    Ответ написан
    Комментировать
  • Syntax error: Как мигрировать из MySQL в Postgres?

    terrier
    @terrier
    Ну, видимо этот ваш загадочный питон-скриптик не учитывает все различия между mysql и psql, так что даже если вы исправите эту конкретную ошибку ( нужно убрать кавычки ), то вылезет куча других.
    Я бы порекомендовал воспользоваться для конвертации дампа чем-нибудь из более проверенных инструментов
    Ответ написан
  • Почему результат выводится inf?

    terrier
    @terrier
    пс. факториал считается правильно.. проверяла. проблема именно в сумме ряда.

    Проверьте еще раз, например на таком примере: factorial(36)
    Вспомним, что факториал - число большое, а в int влезает не так много. А что у нас там является результатом знакового переполнения в C++, напомните?
    Ответ написан
    8 комментариев
  • Почему не работает этот код с ссылками?

    terrier
    @terrier
    using namespace std;

    Вот не надо так делать и не будет подставляться std::swap (который как известно возвращает void) вместо вашего варианта swap
    P.S. Ну, и, конечно сама функция swap, которая не свапает - это тоже достойно.
    Ответ написан
    1 комментарий
  • Как получить место, откуда выбрасывается sigsegv и ему подобные?

    terrier
    @terrier
    Вам это для чего?
    В случае linux:
    Для анализа глазами постфактум - смотреть core dump с помощью gdb.
    Пробовать делать что-то программно - используйте sigaction() вместо signal() и там вся информация доступная информация передается в параметре siginfo_t *info хэндлера
    Ответ написан
    4 комментария
  • MySql/SqLite/MongoDB кто меньше всех потребляет оперативной памяти?

    terrier
    @terrier
    К чему конкретно этот вопрос? Все эти базы займут не больше памяти, чем вы укажете в настройках. Если же вам интересно, кто эффективнее использует память - это надо конкретно сравнивать форматы хранения данных и индексов (B-tree, BSON, LSM-tree и т.д.) и их реализации. Плюс учитывайте сжатие/не сжатие данных.
    1) Правильно ли чем больше mysql база тем больше потребление памяти потому что база загружается в память?

    Нет, память используется для кэширования и сама по себе база в память в общем случае не подгружается.
    2) И верно ли что sqlite в отличии от mysql базу в оперативной памяти не хранит,

    Как мы установили, и mysql базу в оперативной памяти тоже не хранит. Логика подсказывает, что в sqlite должен экономнее относиться к ресурсам, но это догадки.
    3) Что насчет MongoDB?

    Да, что там у монги? Там BSON для данных и тот же B-tree для индексов ( в основном ). В тех, бенчмарках, которые я видел b-tree индекс в монге занимал на треть больше места, чем в mysql. Но вы померяйте и выложите актуальные данные, очень интересно.
    Ответ написан
    Комментировать
  • Как печатать указатели в C++?

    terrier
    @terrier
    Но как известно они возвращают указатели.

    Как известно, они возвращают итераторы.

    Есть задачи найти индекс первого и последнего вхождения числа x в последовательность.
    Я решил использовать lower_bound(x) и upper_bound(x)

    Однако, lower_bound и upper_bound возвращают итераторы на первое значение, которое больше или равно ( или соответственно, меньше или равно ) заданному. Для того, чтобы найти конкретно заданное значение нужно использовать, как это ни удивительно find.
    Кроме того, вы же понимаете, что multiset пересортировывает входящую последовательность и она уже будет не такой, как вводит пользователь?

    Если вам нужен индекс, то нужно из итератора, полученного из функции поиска вычесть итератор на начало последовательности. Кроме того не забудьте обработать случай, когда числа в последовательности вовсе нет. Первое вхождение ищется очевидным образом, как найти последнее, пожалуй оставим на самостоятельное изучение.
    Ответ написан
  • Как сделать ограничение уникальности по массиву в PostgreSQL?

    terrier
    @terrier
    Возможно ли както средствами самого постгреса ограничить значения элементов массивов?

    Ну, да, вы же можете в CHECK constraint поставить любую sql или pl/pgsql функцию, которая проверяет какое угодно условие. При этом надо понимать, что CHECK срабатывает до вставки данных и видит только уже существующие данные. Если вам нужно, чтобы функция проверки видела и вставляемые данные, то нужно пользоваться триггерами.
    Ответ написан
  • Надо ли хранить pqxx::connection?

    terrier
    @terrier
    Создавать соединения постоянно, конечно, не надо. Пока вам достаточно одного соединения с базой можно хранить объект соединения. Для нескольких соединений нужен connection pool. Про его создание в документации libpqxx пишут, что
    spoiler

    If you want to have multiple concurrent transactions, let them work on different connections. An easy way to do this is to set up a connection pool: create a bunch of lazyconnection objects, all initialized with the same connection string. Connections of this type will set themselves up only when they are actually used, so there is no big cost to creating more than you're going to use.

    В реальном продакшне для таких целей используют pgbouncer
    Ответ написан
    2 комментария
  • Как перейти с C++ на C?

    terrier
    @terrier
    Кернигана и Ритчи уже прочитали? Тогда заполируйте это книжкой "21st century C" и к разработке на С вы готовы. Сам язык, как вы правильно заметили относительно компактный.
    Ответ написан
    Комментировать
  • Какое время жизни объекта в std::unique_ptr?

    terrier
    @terrier
    Хотите еще более клевую штуку покажу?
    int main(int argc, char *argv[])
    {
        ttt *t = new ttt();
        t->foo();
        delete t;
    
        t->foo();
    
        return 0;
    }

    Выводит
    Alive 0x55d7770d0c20
    Removing
    Alive 0x55d7770d0c20
    ( собирал чем попало ).
    При вызове деструктора для объекта никто не обязан как-то его "разрушать", скажем занулять область памяти, где он лежал. Это просто договоренность с программистом, что объект удален и обращаться к нему не надо. Что будет если обратиться? Undefined behaviour, частный случай которого мы с вами и наблюдаем.
    Ответ написан
    Комментировать
  • Как получить время работы процесса?

    terrier
    @terrier
    ps -p $PID -o time=
    И преобразовать в секунды
    Ответ написан
    1 комментарий
  • Подсчет количества автомобилей для перевозки n пассажиров?

    terrier
    @terrier
    Это вариация на тему задачи об укладке рюкзака. Теоретически она NP-полная. Практически подходы к решению есть: самое простое, конечно отсортировать автомобили по возрастанию удельного коэффициента стоимости поездки ( на человека, то есть
    4.2 / 30 = 0.14
    1.6 / 7 = 0.22
    1.2 / 4 = 0.3
    ...)
    и выбирать автомобили по списку сверху вниз. Однако помним, что так мы можем получить решение, наверное, разумное, но сколько угодно далекое от оптимального.
    Ответ написан
    Комментировать
  • Старый мак или Хакинтош?

    terrier
    @terrier
    Естественно, никакого смысла мучиться с хакинтошем нет. Старые маки за $400 - нормальные за исключением батареи. Но для разработки это неактуально, а остальное можно проверить при покупке.
    Ответ написан
  • Сортировка в postgre?

    terrier
    @terrier
    Давайте попробуем вместе почитать документацию по параметрам сортировки postgresql
    https://www.postgresql.org/docs/current/static/que...
    и сообразить, чего вы пытаетесь добиться условиями
    start > 100 DESC, finish > 110 DESC,
    Ответ написан
    Комментировать
  • Отложенное сохранение большого объема статистики?

    terrier
    @terrier
    Миллион пользователей в сутки - это 11 запросов в секунду - копейки для postgresql на хоть сколько либо нормально настроенном железе, никакой Redis вам не нужен.
    Окей, учитываем, что пользователи приходят неравномерно в течение дня плюс есть запросы на дублирующий insert, но в любом случае простой
    INSERT ... ON CONFLICT DO NOTHING
    вам абсолютно достаточно.
    Ответ написан
  • В действительности ли читеры могут без проблем взломать клиенты многопользовательских игр и таким образом получать преимущество?

    terrier
    @terrier
    Само по себе то, что сервер является авторитативным ( авторитарный это политический режим ) не панацея.
    Что могут сделать читеры даже если вся логика на сервере?
    - Автоматизировать то, что по идее должен делать игрок на клиенте. Отсюда aimbot'ы и штуки типа автоматического добивания крипов в доте.
    - Покрутить параметр transparency в движке клиента. Упс, теперь нам стены мешают гораздо меньше
    - Подсветить на клиенте то, что не должно быть не очень заметно. Враг спрятался за ящиком, так что только один пиксель виден - покажем это ярко красными буквами.
    То есть мы можем читерить в очень широких пределах даже в случае идеального сервера. А если мы вспомним, что по соображениям производительности мы должны отдавать клиенту все-таки несколько больше, чем игрок видит вот данный момент, то получаем еще бОльшее количество возможных автоматизаций и волхаков.

    баны читеров и вообще возможность читерить на клиенте - это просто способ разработчиков закрыть свои недоработки и непрофессиональность

    Полностью избежать любого читинга на практике нельзя. Создание античитинговых систем ограничивается
    - стоимостью
    - удобством пользователя
    Ответ написан
  • Как создаются большие игры на c++ или c#?

    terrier
    @terrier
    Для AAA-проектов "самописный" движок - это как правило означает, что он был создан выделенной командой разработчиков, используется только внутри проектов данного издателя и наружу не отдается. Яркий пример - Infinity Ward Engine, разные версии которого уже второе десятилетие тянут серию Call of Duty. Или, скажем, движок Diablo 3.
    А так - ну, можете представить себе, что движок обеспечивает то, что "объекты" сталкиваются, груди и волосы колышутся, сетевые сообщения передаются, а вот собрать из всего этого Battlefield предстоит тем десяткам программистов студии-разработчика.
    (Да, стандарт де-факто программирования для AAA-проектов - это, конечно же C++, ради портабельности и производительности. Но для скриптов и инструментов используется куча всего разного C#/Lua/Python и т.д. и т.п.)

    P.S. Вспомнил, кстати, пример интересной игры на самописном движке на C# - Bastion.
    Ответ написан
    Комментировать