Рубрика «Программирование» - 864

В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.

Требования к библиотеке все теже:

  • Кроссплатформенность;
  • Минимум зависимостей;
  • Скорость чтения;
  • Простой синтаксис;

Пример конфига

{
    "objects":
    [
        {
            "id": "object1",
            "events":
            {
                "event1":{
                    "give": {"object2": 4}
                },
            }
        },
        {
            "id": "object2",
            "events":
            {
                "event2":{
                    "give": {"object1": 3}
                },
            },
            {
            "id": "object3",
            "events":
            {
                "event3":{
                    "give": {"object3": 4}
                },
            }
        },

Первая и самая простая идея которая напрашивается это:

    std::map<std::string,script> events;

Но опять же если это высоконагруженная часть программы то поиск по map может быть достаточно долгим, хэши могут дать колизии чего совсем не хочется.

Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.

Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций

Читать полностью »

image

Друзья, приглашаю вас на ежегодный праздник свободного ПО, Software Freedom Day, который пройдёт уже на следующих выходных в более чем 160 городах по всему миру!
Читать полностью »

Всем привет! Мы — небольшая команда разработчиков сервисного робота Tod Bot. В своей практике мы широко используем фреймворк ROS, постоянно решая с его помощью насущные для нашего робота задачи: от управления передвижением и обработки данных с сенсоров до автономной навигации в помещении, распознавания речи и образов, высокоуровневого поведения робота.
Сегодня в рамках конкурса на образовательной платформе Stepic мы анонсируем онлайн-курс «Программирование робота вместе с ROS». Наш курс будет интересен людям, неравнодушным к программированию и робототехнике, и готовым получить новые знания и навыки по разработке ПО для роботов, конечно же, приложив при этом необходимые усилия. Получить представление о содержимом курса вы можете из небольшого интро-видео.
Читать полностью »

Розыгрыш призов в честь Дня программиста

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

Принять участие в розыгрыше может каждый, у кого есть аккаунт на Хабре, даже read-only. Сделать это проще простого: достаточно авторизоваться, перейти на страницу розыгрыша и нажать там на кнопку. Призов для победителей розыгрыша заготовлено много, и все ценные, так что рекомендуем принять участие. Подробности — под катом.
Читать полностью »

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

Кратко о RMI: программный интерфейс вызова удаленных методов в языке Java (источник). С помощью него можно например управлять данными на программе сервера с одного или множества компьютеров. Подробнее можно почитать на Хабре. Будем исходить из того, что с его основами вы уже знакомы. Необходимо так же иметь представление о нововведениях в Java 8, а именно — вам понадобятся лямбда-выражения. Хорошее объяснение есть здесь.
Читать полностью »

13 е сентября — День программиста (досрочное поздравление)

Друзья, завтра День программиста! Наверняка у каждого из нас есть знакомый программист. Такой специальный человек, которого все просят починить компьютер, принтер, телефон, «а что, он же программист, значит шарит в компьютерах». Так вот, не забудьте завтра поздравить этих знакомых и важных людей! Но сегодня пятница, поэтому мы решили поздравить всех программистов заранее.

Важность труда программистов для мира IT трудно переоценить. И не только для него. Благодаря им у нас есть компьютеры, смартфоны, планшеты, сайты, соцсети, мессенджеры и даже Хабр. Теперь вот они ещё и очки с часами прокачали. Благодаря программистам, мы сегодня обрели способности полубогов, с точки зрения предков. Современные высокие технологии позволяют нам получить все знания мира, не вставая с дивана. Всего за несколько десятилетий развитие программирования радикально поменяло мир, сделало доступными невиданные, фантастические технологии. Мы теперь можем увидеть на маленьком устройстве каждый уголок планеты, сразу узнать о событиях, происходящих за тысячи километров от нас. И если к возможностям и универсальности компьютеров и мобильных гаджетов все давно привыкли, то нас ещё ожидают невероятные успехи в роботостроении. Глядя на текущие достижения, понимаешь, что пора сдувать пыль с трёх законов робототехники, они нам уже скоро понадобятся.

Ладно, а теперь развлекательная часть. Сегодня мы подготовили для вас небольшой ролик, который особенно оценят программисты, работающие в командах, отделах и прочих департаментах. Не будем описывать, смотрите сами.

Поздравляем вас! Желаем безбажного кода, интересных проектов и успешных релизов! Кстати, наш CEO Дмитрий Гришин тоже когда-то был программистом, начав свою карьеру с должности разработчика ПО, подрабатывая на нескольких работах и учась при этом в Бауманке. Через два года он занял пост технического директора в новой компании Mail.Ru, которая несколько лет спустя выросла в крупнейшую IT-компанию России. В связи с праздником мы попросили наших программистов рассказать о том, почему они выбрали эту профессию, и что станет с программистами через 20 лет. Их рассказы читайте под катом.
Читать полностью »

Часы на кривых Безье

Bézier Clock — часы на кривых Безье, где цифры плавно перетекают из одной формы в другую. Автор говорит, что это его первый проект на Processing.js, исходный код опубликован. Можно отредактировать его и изменить, например, скорость анимации.

При выключенной анимации цифры трансформируются за 5 секунд до смены значения, а при включенной (пробелом) — в течение всего времени. Например, в 12:30:35 цифра «2» будет уже на полпути к превращению в «3». Направляющие скрываются кликом мыши.

Читать полностью »

Сегодня поговорим о том, как писать скрипты для Unity Editor. Статья рассчитана на тех, кто уже знаком с Unity3D, что-то успел сделать, но еще не решился попробовать писать скрипты для эдитора.

Если коротко — то в режиме эдитора скриптами можно сделать абсолютно всё тоже самое, что и в режиме игры.

Начнем с простого. Допустим, мы хотим в режиме эдитора создать 10 кубиков и расположить их в линию. Для начала давайте упростим задачу и забудем про эдитор, давайте сделаем так, чтобы эти кубики создавались при старте приложения.
Читать полностью »

В последнее время я увлёкся темой зависимости от C Runtime в проектах, написанных на Visual C++. Вернее, темой избавления от зависимости от Visual C++ Redistributable, ведь если проект представляет собой небольшую библиотеку интеграции или простейшую утилиту, таскать за собой целый распространяемый пакет не очень удобно.

На Хабре уже была статья на данную тему, однако я в процессе своих экспериментов столкнулся с некоторыми проблемами. Об этих проблемах и о способе их решения и пойдёт речь.

Сразу оговорюсь, что я изначально ожидаю, в целом, справедливой критики на счёт правильности подхода к проблемам и вообще в целом линковки с msvcrt.dll — да, это не поддерживаемое Microsoft решение, да, это решение больше подходит для новых проектов, и да, возможно, придётся отказаться от многих плюшек, но ведь это используют, да и кто не рискует… В общем, все, кому интересна эта тема, как и мне, — прошу под кат.

Заранее прошу прощения за заголовок: я старался перевести фразу «Linking to msvcrt.dll in Visual C++». Статья моя, это не перевод, но название всё-таки проще сформулировать на английском.
Читать полностью »

Я работаю в игровой сфере. В связи с этим постоянно приходится сталкиваться со всевозможными конфигами.
Каждый раз, когда в конфигах должно быть некое перечисление, возникает дилема. С одной стороны, хочется читаемых конфигов, с другой — быстрого парсинга и быстрого обращения по этому типу.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js