• Какие 2D/3D игровые движки/библиотеки есть для языка C?

    @mrobespierre
    только здесь 11 штук
    https://en.wikipedia.org/wiki/List_of_game_engines
    вот хороший пример
    https://github.com/orangeduck/Corange

    ну а sdl не движок, а либа

    если у вас правда так хорошо с Си, что можно игры писать, берите C# + Unity, за 2-5 недель втянитесь и начнете фигачить

    и да, почти все современные движки на плюсах, если серьёзно интересуетесь геймдевом, учите их
    Ответ написан
    1 комментарий
  • Каким образом задать динамический массив символов (строку) если не известен изначальный размер вводимой строки?

    @mrobespierre
    если интерес академический, то как предложили коллеги: malloc/calloc
    если надо чтобы работало, берите glib (не путать с glibc)
    если надо чтобы работало, и glib не устраивает (тяжело себе представить такую ситуацию, но допустим), выделяйте больше, например [512], но считывайте в них только первые [500] (тож например), scanf так умеет. проверяйте сколько считалось: если ровно 500 - пользователь точно ввёл много и скорее всего всё не влезло, ругайтесь на него (скажите, что 256 было максимум) и считывайте опять. если же <500, то всё ок, можно работать. надеюсь понятно объяснил: главное - не считать данных больше, чем выделено места (избегнуть переполнения буфера)
    Ответ написан
    Комментировать
  • Какую книгу по Си посоветуете после js и python?

    @mrobespierre
    удваиваю Клеменса ну и Кинг (C Programming A Modern Approach 2nd ed)
    K&R не читайте, он был идеален в своё время (40 лет назад), но с выходом стандарта C99 устарел. в 2017 году писать в стиле K&R тем более нельзя
    Ответ написан
    Комментировать
  • Как сделать красивое приложение на GTK+?

    @mrobespierre
    если можете в C++, смотрите лучше в сторону Qt/QML. если нужно что-то вообще неземное, попробуйте SDL2.
    Ответ написан
    Комментировать
  • Как реализовать считывание строк из файла в массив строк?

    @mrobespierre
    указатели сами по себе не очень сложно понять: грубо говоря - это переменная, значением которой является адрес в памяти, по которому лежит значение другой переменной (обычно анонимной, или безымянной, если угодно). строк в Си нет (но можно подключить например glib и наслаждаться). строкой в "ванильном" Си, без дополнительных библиотек, принято называть массив символов. массив в Си (с небольшими оговорками) - это указатель на первый элемент массива. выше уже написали, что если вы хотите считать строки файла в массив строк, то на самом деле вам нужен массив массивов (т.е. 2-мерный массив) символов. важной особенностью массивов в Си является необходимость указания размера ещё на этапе компиляции, т.е. мы сначала задаем размер массива (в данном случае он будет длиной строки), а потом заполняем его, попутно проверяя, не "переполнили" ли мы выделенное место. коллеги предлагают небольшие размеры массивов (26,7,20), я всегда выделяю 512 (2017 год на дворе), но считываю не более 500. удачи.
    Ответ написан
    Комментировать
  • Что за структура функции в Go?

    @mrobespierre
    book - это ресивер, тип данных, который обладает данным методом. выше написали, что ресивер имеет тип "структура", так оно и есть в данном случае, и так оно и есть в 99% других случаев, но нельзя забывать важный нюанс - в Go, любой тип данных может иметь методы (не только struct), хоть string, хоть int
    Ответ написан
    Комментировать
  • Какие проблемы могут быть если Docker используется как замена KVM/XEN?

    @mrobespierre
    1. С безопасностью всё непросто. Вам нужен хороший специалист со знанием Selinux/Apparmor чтобы вручную изолировать контейнеры друг от друга. Насколько я знаю, по умолчанию LSM в Docker не задействованы (решето кароч). В связке KVM/libvirt оно настроено из коробки, нужно только в конфиге включить.
    2. С лимитами всё непросто тоже. Docker использует cgroups. В целом они работают. Особенно CPU и Memory (хотя когда я крутил с ними были определённые проблемы: память например ограничивалась, но виделась целиком, что вводило в заблуждение некоторые приложения). Дисковый "контроллер" включался, но по факту не работал (а он, под нагрузкой, самый важный, по крайней мере для меня). Ограничить сеть я вообще не смог (в случае ddos, например, целевой машине лучше иметь 100 мбит). В связке KVM/libvirt настраивается и работает всё.
    На этом моменте я от docker отказался и по возможностям ничего сказать не могу. Данные могли устареть (docker активно пилится). По моему мнению, docker - отличная игрушка для программистов, но совершенно не годится для серьёзного продакшена. Кроме того, для KVM/libvirt есть отличные управлялки: OpenNebula и Cloudstack, которые отлично масштабируются с 10 до 1000 хостов (можно и больше), есть ли подобные по удобству и функционалу для docker? - Не уверен.
    Ответ написан
    1 комментарий