Предложите мне удобную IDE под Linux, позволяющую одновременно отлаживать код на C++ и код на языке типа C#/Java, и я перейду на Linux. Мне нужно что-то типа Rider + Clion, но одной программой и бесплатные.
Продукты от jetbrains одинаково выглядят и работают в любой системе. (включая idea, pycharm, clion, rider). Ещё есть бесплатные универсальные netbeans и eclipse (могут в С++ и java как минимум), но я ими давно не пользовался.
Если вы намекаете на visual studio, то спешу напомнить, что бесплатная только самая урезанная версия. После регулярного использования вышеупомянутых ide visual studio лично у меня вызывает боль и ненависть. Например, переименование переменной было добавлено только в vs 2015.
Скажите, пожалуйста, а как с производительностью и энергопотреблением линукса?
В производительности по сравнению с виндой разницы не заметил. Потребление оперативной памяти меньше. Энергопотребление после некоторой настройки (ставил tlp) сравнимо с виндой в энергосберегающем режиме.
Давно задумываюсь о переходе на линукс.
Поставьте второй системой рядом с виндой и экспериментируйте потихоньку.
Поскольку процесс пуассоновский, предсказать появление следующего клиента на основе данных о предыдущих клиентах не получается и делать что-либо «в ожидании богатого клиента» нельзя.
Можно. (делать, а не предсказывать)
Пример: есть 1 корова, пополнение появится через большое время t.
По оценке, самый выгодный тип покупателей придёт раньше чем t c большой вероятностью (Например, 0.9). В таком случае нет смысла прям сейчас продавать корову дёшево.
Дополнения к навигатору в стиле «через 500 метров скоро будет красный, рекомендую снизить скорость и попасть в зеленую волну».
Сейчас многие светофоры в Москве с таймером — показывает время до переключения. Очень удобно как автомобилистам (можно планировать действия заранее), так и пешеходам (нет смысла перебегать дорогу, если там осталось, например, 15 сек.)
Живу в общаге коридорного типа. Практически в каждой комнате стоит по роутеру и живут 2-4 человека (пусть в среднем на 1 студента к wifi подключен 1 телефон и 1 ноутбук). По вертикали пробивает 1-2 этажа — можно увидеть сети оттуда, по горизонтали сеть видно даже через 5 комнат, более-менее использовать можно через 2. Что меня удивляет — даже при такой плотности размещения wifi работает вполне нормально.
Если торрент качал что-нибудь из локалки (из неё нет ограничения скорости), скорость по wifi (2.4 Ггц )достигала 8 мегабайт/с (не мегабит, не вижу смысла измерять в последних). Если подключиться к роутеру по ethernet — доходило до 11 мегабайт/c — по-сути, большой разницы нет.
Я ради интереса скомпилировал тот кусок кода с gcc и посмотрел, что получилось.
Код
unsigned long long getHash(unsigned long long hash, int prime_index){
switch(prime_index){
case 0:
return 0llu;
case 1:
return hash % 2llu;
case 2:
return hash % 3llu;
case 3:
return hash % 5llu;
case 4:
return hash % 7llu;
case 5:
return hash % 11llu;
case 6:
return hash % 13llu;
case 7:
return hash % 17llu;
case 8:
return hash % 23llu;
case 9:
return hash % 29llu;
case 10:
return hash % 37llu;
case 11:
return hash % 47llu;
case 12:
return hash % 59llu;
case 13:
return hash % 14480561146010017169llu;
case 14:
return hash % 18446744073709551557llu;
}
return 0;
}
собрать можно командой типа: gcc -O2 -o o2.o -c code.c
посмотреть objdump -d o2.o
Скомпилированный код с любой опцией, кроме -Os, вместо каждого взятия остатка содержит кучку инструкций:
Каждый из вариантов — целое число по модулю на основе статической константы. Чем это хорошо? Если использовать константу, то компилятор применит кучу оптимизаций для ускорения вычисления. Для каждого из вариантов вы получаете кастомный ассемблерный код, который будет работать гораздо быстрее, чем целое число по модулю. Выглядит несколько безумно, но даёт огромный прирост скорости.
Я так понимаю, тут утверждается, что операция получения остатка от деления долгая, и в случае с константой компилятор сможет заменить деление на что-нибудь более быстрое.
По-сути, поезд так и остался набором джоинтов, только чуть более сложных.
Удивительно то, что сейчас это практически не играет никакой роли…
Ну относительно усилий, которые были вложены во всю игру, реализация поезда — мелочь. Например, для этого поезда кто-то делал модельки всех вагонов и рисовал текстуры.
Да, они от примитивной реализации поезда как единого целого сделали шаг вперёд и стали рассчитывать вагоны по отдельности, но у меня сложилось впечатление, что код просто подгоняли, чтобы результат смотрелся красиво, забивая на физическую корректность происходящего:
Как я упомянул ранее, мы не позволяем импульсам соединительной стяжки менять скорость локомотива
…
Поэтому мы использовали меньшее значение трения и масштабировали его относительно времени, прошедшего после отсоединения вагона.
Например, я бы на их месте вместо Ейлера использовал интегрирование Верле — оно даёт второй порядок точности и позволяет легко накладывать ограничения (например, на максимальное и минимальное расстояния между вагонами), причём было бы достаточно фиксированного шага по времени без бинарного поиска моментов "когда было столкновение"
За пять минут робот-камикадзе может многое натворить. Представьте ощущения людей-противников, которые знают, что к ним может прибежать бешеная табуретка на ножках с гранатой, которую можно остановить, только уничтожив? Что эта табуретка может спрятаться в яме или ещё где-нибудь, перейти в "спящий" режим на сутки-двое, а потом при появлении врага внезапно выскочить?
90 минут — это достаточно. Если предположить, что робот будет заряжаться за те же 90 минут внутри какой-нибудь переделанной БМП, то, например, внутри будет заряжаться пятеро и ещё пятеро будут бегать по округе хоть круглые сутки, сменяя друг друга для подзарядки.
Если будет реально необходимо, можно поставить в робота ДВС и генератор. (у boston dynamics некоторые роботы так и сделаны)
А всё остальное укладывается, по-моему, в «нет времени играть нормально, поэтому я испорчу игру другим».
Всё остальное укладывается в "нужно получать деньги, испортим геймплей усложним игрокам жизнь, чтобы они были вынуждены платить или страдать".
Сужу по примеру wot/war thunder. Хочется поиграть на нормальной технике — качай всю предыдущую ветку. (если жалко времени или предыдущая техника принципиально не нравится — плати, переводи опыт).
Открыл новый танк — а он со стоковыми модулями (т.е., пушка, двигатель, рация, и вообще характеристики значительно хуже), страдай или снова плати, чтобы "проскочить" это состояние.
Жалко тратить 30 часов на прокачку? Плати за премиум и прокачивай за 20.
Дошёл до высокоуровневой техники — она неприбыльная, покупай прем или снова играй на низких уровнях.
Мало того, как бы грустно это не звучало, но кроме как максимализации цены использования авто в городе, проблему почти никак не решить. Да, в Москве просто по-идиотски настроены светофоры, и вполне могут гореть зеленым пустой дороге 3 минуты, а на дороге с пробкой выделяться 15 секунд. Но если это проблему исправить (а я все-таки надеюсь, что ее исправят), то просто авто пользоваться станет чуть выгоднее, что увеличит количество машин, что увеличит пробки.
Не в первый раз встречаю такую точку зрения, из которого почти всегда делают вывод о том, что автомобилистов надо угнетать. Хотя реальная проблема в другом — в неразвитом общественном транспорте.
Если путь из А в Б на общественном транспорте занимает 2 часа, то автомобилист будет готов эти два часа простоять в пробке — потому что сидеть в машине с кондиционером явно комфортнее, чем стоять в битком набитой электричке.
Вариант с велосипедами для Москвы плохо подходит — она большая, и климат слишком холодный. Зимой по снегу или осенью под дождём мало кто захочет ехать 10-20 км на работу и потом обратно.
Можно вместо putFields просто писать данные в поток.
private fun writeObject(s : ObjectOutputStream) {
s.putObject(strField as Any?)
s.putInt(intFieldChanged)
}
В этом случае имена полей не сохраняются, сохранённый класс будет занимать меньше места, а сериализация будет работать в несколько раз быстрее.
Конечно, я не призываю всё время делать так, но это очень удобная возможность: можно использовать сначала стандартную сериализацию, а потом при необходимости "ускорять" только медленные классы, не трогая всё остальное.
Поиграл немного, нашёл простую и эффективную стратегию, задолбался тыкать кнопочки, написал бота — он набрал 412830 очков за 21544 шага. Мог бы и дальше набирать, но стало лень ждать.
стратегия
двигать вверх, влево, вниз, вправо и так пока не надоест
Откуда у Вас столько мотивации? Иногда с кровати трудно встать, не то что делать игру после рабочего дня. У меня почему-то не получалось писать игры дольше 2-3 месяцев — разочаровываюсь в идее, возникает желание переделать и т.п.
Ого. Я с помощью глубины делал — но у меня "источник" был только один. Рисовал объекты уровня на глубине 0, а у четырёхугольников-теней две вершины имели z=-1, и такой четырёхугольник "перекрывал" все другие объекты. маленькое видео
При желании можно написать вершинный шейдер, который будет переводить (х, у) в полярные координаты, (r, phi) и использовать r как глубину. (Хотя у меня есть подозрение, что люди не заморачиваются и просто рисуют в 4 камеры с углом обзора 90 градусов каждая)
Для С++ точно не было. Даже локальную переменную в функции нельзя было переименовать. пруф на msdn
Ого, действительно почти не отличается. Но отсутствие "Version Control using Git-based Repositories" выглядит очень странно.
Продукты от jetbrains одинаково выглядят и работают в любой системе. (включая idea, pycharm, clion, rider). Ещё есть бесплатные универсальные netbeans и eclipse (могут в С++ и java как минимум), но я ими давно не пользовался.
Если вы намекаете на visual studio, то спешу напомнить, что бесплатная только самая урезанная версия. После регулярного использования вышеупомянутых ide visual studio лично у меня вызывает боль и ненависть. Например, переименование переменной было добавлено только в vs 2015.
В производительности по сравнению с виндой разницы не заметил. Потребление оперативной памяти меньше. Энергопотребление после некоторой настройки (ставил tlp) сравнимо с виндой в энергосберегающем режиме.
Поставьте второй системой рядом с виндой и экспериментируйте потихоньку.
Можно. (делать, а не предсказывать)
Пример: есть 1 корова, пополнение появится через большое время t.
По оценке, самый выгодный тип покупателей придёт раньше чем t c большой вероятностью (Например, 0.9). В таком случае нет смысла прям сейчас продавать корову дёшево.
Сейчас многие светофоры в Москве с таймером — показывает время до переключения. Очень удобно как автомобилистам (можно планировать действия заранее), так и пешеходам (нет смысла перебегать дорогу, если там осталось, например, 15 сек.)
Живу в общаге коридорного типа. Практически в каждой комнате стоит по роутеру и живут 2-4 человека (пусть в среднем на 1 студента к wifi подключен 1 телефон и 1 ноутбук). По вертикали пробивает 1-2 этажа — можно увидеть сети оттуда, по горизонтали сеть видно даже через 5 комнат, более-менее использовать можно через 2. Что меня удивляет — даже при такой плотности размещения wifi работает вполне нормально.
Если торрент качал что-нибудь из локалки (из неё нет ограничения скорости), скорость по wifi (2.4 Ггц )достигала 8 мегабайт/с (не мегабит, не вижу смысла измерять в последних). Если подключиться к роутеру по ethernet — доходило до 11 мегабайт/c — по-сути, большой разницы нет.
Я ради интереса скомпилировал тот кусок кода с gcc и посмотрел, что получилось.
собрать можно командой типа: gcc -O2 -o o2.o -c code.c
посмотреть objdump -d o2.o
Скомпилированный код с любой опцией, кроме -Os, вместо каждого взятия остатка содержит кучку инструкций:
Я так понимаю, тут утверждается, что операция получения остатка от деления долгая, и в случае с константой компилятор сможет заменить деление на что-нибудь более быстрое.
По-сути, поезд так и остался набором джоинтов, только чуть более сложных.
Ну относительно усилий, которые были вложены во всю игру, реализация поезда — мелочь. Например, для этого поезда кто-то делал модельки всех вагонов и рисовал текстуры.
Да, они от примитивной реализации поезда как единого целого сделали шаг вперёд и стали рассчитывать вагоны по отдельности, но у меня сложилось впечатление, что код просто подгоняли, чтобы результат смотрелся красиво, забивая на физическую корректность происходящего:
Например, я бы на их месте вместо Ейлера использовал интегрирование Верле — оно даёт второй порядок точности и позволяет легко накладывать ограничения (например, на максимальное и минимальное расстояния между вагонами), причём было бы достаточно фиксированного шага по времени без бинарного поиска моментов "когда было столкновение"
За пять минут робот-камикадзе может многое натворить. Представьте ощущения людей-противников, которые знают, что к ним может прибежать бешеная табуретка на ножках с гранатой, которую можно остановить, только уничтожив? Что эта табуретка может спрятаться в яме или ещё где-нибудь, перейти в "спящий" режим на сутки-двое, а потом при появлении врага внезапно выскочить?
90 минут — это достаточно. Если предположить, что робот будет заряжаться за те же 90 минут внутри какой-нибудь переделанной БМП, то, например, внутри будет заряжаться пятеро и ещё пятеро будут бегать по округе хоть круглые сутки, сменяя друг друга для подзарядки.
Если будет реально необходимо, можно поставить в робота ДВС и генератор. (у boston dynamics некоторые роботы так и сделаны)
Всё остальное укладывается в "нужно получать деньги,
испортим геймплейусложним игрокам жизнь, чтобы они были вынуждены платить или страдать".Сужу по примеру wot/war thunder. Хочется поиграть на нормальной технике — качай всю предыдущую ветку. (если жалко времени или предыдущая техника принципиально не нравится — плати, переводи опыт).
Открыл новый танк — а он со стоковыми модулями (т.е., пушка, двигатель, рация, и вообще характеристики значительно хуже), страдай или снова плати, чтобы "проскочить" это состояние.
Жалко тратить 30 часов на прокачку? Плати за премиум и прокачивай за 20.
Дошёл до высокоуровневой техники — она неприбыльная, покупай прем или снова играй на низких уровнях.
Не в первый раз встречаю такую точку зрения, из которого почти всегда делают вывод о том, что автомобилистов надо угнетать. Хотя реальная проблема в другом — в неразвитом общественном транспорте.
Если путь из А в Б на общественном транспорте занимает 2 часа, то автомобилист будет готов эти два часа простоять в пробке — потому что сидеть в машине с кондиционером явно комфортнее, чем стоять в битком набитой электричке.
Вариант с велосипедами для Москвы плохо подходит — она большая, и климат слишком холодный. Зимой по снегу или осенью под дождём мало кто захочет ехать 10-20 км на работу и потом обратно.
Как Вы думаете, насколько просто это написать и потом искать баги, возникновение которых будет зависеть от взаимного сочетания разнообразных логик?
Ещё умиляет, когда после удаления игры "защита" остаётся в системе и продолжает заниматься своими тёмными делами.
А ещё win10 умеет просыпаться из спящего режима для установки обновлений. Отключается в настройках режима энергосбережения.
Можно вместо putFields просто писать данные в поток.
В этом случае имена полей не сохраняются, сохранённый класс будет занимать меньше места, а сериализация будет работать в несколько раз быстрее.
Конечно, я не призываю всё время делать так, но это очень удобная возможность: можно использовать сначала стандартную сериализацию, а потом при необходимости "ускорять" только медленные классы, не трогая всё остальное.
Поиграл немного, нашёл простую и эффективную стратегию, задолбался тыкать кнопочки, написал бота — он набрал 412830 очков за 21544 шага. Мог бы и дальше набирать, но стало лень ждать.
двигать вверх, влево, вниз, вправо и так пока не надоест
Откуда у Вас столько мотивации? Иногда с кровати трудно встать, не то что делать игру после рабочего дня. У меня почему-то не получалось писать игры дольше 2-3 месяцев — разочаровываюсь в идее, возникает желание переделать и т.п.
Ого. Я с помощью глубины делал — но у меня "источник" был только один. Рисовал объекты уровня на глубине 0, а у четырёхугольников-теней две вершины имели z=-1, и такой четырёхугольник "перекрывал" все другие объекты. маленькое видео
При желании можно написать вершинный шейдер, который будет переводить (х, у) в полярные координаты, (r, phi) и использовать r как глубину. (Хотя у меня есть подозрение, что люди не заморачиваются и просто рисуют в 4 камеры с углом обзора 90 градусов каждая)