• Создание системы расширения на библиотеке Qt

    Плагины(Расширения)


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

    Расширения делятся на два типа:

    • Для Qt
    • Для собственных приложений

    Разберём как создать свою систему расширений и сами расширения для него.

    Связь с расширением осуществляется с помощью интерфейса (сигналы, слоты и методы класса). Расширение загружается приложением при помощи класса QPluginLoader. Для загрузки расширения используется метод instance(), который создаёт объект расширения и возвращает указатель на него. Для выгрузки расширения используется метод unload().

    Часть 1


    В первом примере создадим расширение которое будет использовать функцию(алгоритм, формулу) из расширения.

    Визуальная схема проекта будет выглядеть следующим образом.


    Читать дальше →
  • Топ 20 ошибок при работе с многопоточностью на С++ и способы избежать их

    Привет, Хабр! Предлагаю вашему вниманию перевод статьи «Top 20 C++ multithreading mistakes and how to avoid them» автора Deb Haldar.


    Сцена из фильма «Петля времени» (2012)

    Многопоточность— одна из наиболее сложных областей в программировании, особенно в C++. За годы разработки я совершил множество ошибок. К счастью, большинство из них были выявлены на код ревью и тестировании. Тем не менее, некоторые каким-то образом проскакивали на продуктив, и нам приходилось править эксплуатируемые системы, что всегда дорого.

    В этой статье я попытался категоризировать все известные мне ошибки с возможными решениями. Если вам известны еще какие-то подводные камни, либо имеете предложения по решению описанных ошибок– пожалуйста, оставляйте свои комментарии под статьей.
    Читать дальше →
  • Как работает JS: пользовательские элементы

    • Перевод
    [Советуем почитать] Другие 19 частей цикла
    Часть 1: Обзор движка, механизмов времени выполнения, стека вызовов
    Часть 2: О внутреннем устройстве V8 и оптимизации кода
    Часть 3: Управление памятью, четыре вида утечек памяти и борьба с ними
    Часть 4: Цикл событий, асинхронность и пять способов улучшения кода с помощью async / await
    Часть 5: WebSocket и HTTP/2+SSE. Что выбрать?
    Часть 6: Особенности и сфера применения WebAssembly
    Часть 7: Веб-воркеры и пять сценариев их использования
    Часть 8: Сервис-воркеры
    Часть 9: Веб push-уведомления
    Часть 10: Отслеживание изменений в DOM с помощью MutationObserver
    Часть 11: Движки рендеринга веб-страниц и советы по оптимизации их производительности
    Часть 12: Сетевая подсистема браузеров, оптимизация её производительности и безопасности
    Часть 12: Сетевая подсистема браузеров, оптимизация её производительности и безопасности
    Часть 13: Анимация средствами CSS и JavaScript
    Часть 14: Как работает JS: абстрактные синтаксические деревья, парсинг и его оптимизация
    Часть 15: Как работает JS: классы и наследование, транспиляция в Babel и TypeScript
    Часть 16: Как работает JS: системы хранения данных
    Часть 17: Как работает JS: технология Shadow DOM и веб-компоненты
    Часть 18: Как работает JS: WebRTC и механизмы P2P-коммуникаций
    Часть 19: Как работает JS: пользовательские элементы

    Представляем вашему вниманию перевод 19 статьи из серии материалов компании SessionStack, посвящённых особенностям различных механизмов экосистемы JavaScript. Сегодня речь пойдёт о стандарте Custom Elements — о так называемых «пользовательских элементах». Мы поговорим, о том, какие задачи они позволяют решать, и о том, как их создавать и использовать.

    image

    Читать дальше →
    • +28
    • 16,9k
    • 9
  • Mind map вместо тест-кейса, или Как визуализация позволяет тестировать приложение быстрее


      Привет! Меня зовут Катя, и я работаю тестировщиком мобильных приложений более пяти лет. Последние три года я тружусь в iOS-команде Badoo, и еженедельно мы релизим от трёх до семи новых фич, от трёх до пяти технических тасков и от пяти до 13 багфиксов. Как вы понимаете, приложение меняется с такой скоростью, что поддерживать классическую тестовую документацию (test cases) неэффективно: почти всегда она будет устаревшей.

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

      В этом случае визуализация позволяет сэкономить кучу времени, поэтому мы решили попробовать использовать mind maps (или «ментальные карты»), которые так же удобны в использовании, как чек-листы, но более наглядны за счёт визуального формата.

      Сегодня мы подробненько разберём созданную мной mind map для тестирования iOS-приложения (далее именуемую «моя прелесть»), а также пройдёмся по ресурсам, которые можно использовать при построении mind map для мобильного приложения, чтобы покрыть максимальное количество важных сценариев.
      Читать дальше →
    • Конкурс по программированию: Торговля

        UPDATE: Объявления для участников.
        UPDATE 2: Промежуточные результаты и объявления.

        Компания Hola вновь объявляет конкурс по программированию! Победителей ожидают призы:

        1. Первое место: 3000 USD.
        2. Второе место: 2000 USD.
        3. Третье место: 1000 USD.
        4. Жюри может присудить по своему усмотрению специальный приз в 400 USD.
        5. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите половину суммы приза (разумеется, не в ущерб награде победителя). За одного победителя такую награду может получить только один человек — тот, кто отправил ссылку первым.

        Авторы интересных решений будут приглашены на собеседования.



        Правила


        Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.
        Читать дальше →
      • Процедурная генерация подземелий в roguelike

        • Перевод
        image

        Процедурно генерируемые карты — базовая особенность roguelike. Для жанра, который почти является синонимом понятия «случайность» (и на то есть причины), рандомизированные карты стали простейшим способом демонстрации его ключевого элемента, потому что они влияют на многие аспекты геймплея — от стратегии исследования и тактического позиционирования до расположения предметов и врагов.

        Заметьте — в советах по прохождению стратегических игр обычно описываются ключевые точки на общей карте боя и объясняется, что в них нужно делать — следуя указанной последовательности шагов, вы можете выигрывать каждый раз. Разумеется, игроки могут получать удовольствие от попыток решить головоломку, но какой бы увлекательной ни была игра, интерес пропадает после нахождения всех решений.

        Поэтому рандомизированные карты обеспечивают нам бесконечную реиграбельность, каждый раз ставя перед нами разные задачи. Кроме того, удовольствие усиливается тем, что прогресс игрока зависит от его собственного навыка, а не от проб и ошибок. Схема каждой новой карты на 100% неизвестна, что тоже добавляет напряжённости процессу её изучения.

        Конечно же, преимущества процедурных карт бессмысленны без большой вариативности механик и контента — однообразный hack-and-slash здесь не подойдёт. Поэтому все roguelike, выдержавшие испытание временем, имеют глубокий геймплей.

        Этот пост является результатом моей работы над генерацией карт для Cogmind.
        Читать дальше →
        • +41
        • 22,8k
        • 3
      • Kivy — маленький фрукт с большим будущим


          Пpивeтcтвyю вcex!


          Ceгoдняшняя небольшая cтaтья, впpoчeм, кaк вceгдa, кoнeчнo жe, o зaмeчaтeльнoм и пpocтoм, кaк тpи кoпeйки, фpeймвopкe для кpoccплaтфopмeннoй paзpaбoтки Kivy.


          B дaннoм мaтepиaлe бyдyт paзвeяны мифы o тoм, чтo Kivy нe гoдитcя для paзpaбoтки cлoжныx пpилoжeний, бyдyт oпpoвepгнyты пpeдвзятыe мнения, кoтopыe пpeдcтaвляют paзpaбoтчикaм и зaкaзчикaм Kivy, кaк мaлo пoдxoдящий и кpивoй инcтpyмeнт для cepьeзнoй paбoты и coвceм нeгoдным для production.


          Ceгoдняшняя cтaтья бoльнo yдapит пo кocтылям других фреймворков, зacтaвит их пoшaтнyтьcя, ocoзнaть, чтo oни yжe oтнюдь нe eдинcтвeнные и пoдвинyтьcя нaзaд в peйтингe кpoccплaтфopмeннoй paзpaбoтки, cпpaвeдливo ycтyпaя мecтo Kivy, как более быстрому в плане разработки, не менее надежному и более выгодному инструменту!


          Всем заинтересовавшимся, милости просим под кат...

          Читать дальше →
        • Прототипирование — это просто, как собрать пазл. Мультикомпоненты дизайн системы в Figma

            Если вы работаете в среде Figma, то скорее всего вы используете компоненты в своих дизайн-процессах и знаете в чем их преимущества. Когда в ежедневной фриланс рутине я устал повторять создание одних и тех же списков, табов, таблиц или любых других модулей, состав которых динамичен, я начал думать об автоматизации этих процессов, чтобы рутина как минимум протекала быстрее. Таким образом мультикомпоненты и были открыты!


            Узнайте, как ускорить дизайн-процессы
          • Разработка игр под NES на C. Главы 1-3. От введения до Hello World

            • Перевод
            • Tutorial

            Впервые я задумался о том, как разрабатывают игры под приставки где-то через 20 минут после того, как в самый первый раз увидел Turbo Pascal. На глаза иногда попадался Subor с клавиатурой, и появилась мысль: "Наверное можно набрать какую-то программу, а потом в нее поиграть". Но интерес быстро затух, потому что абсолютно никакой информации по этой теме тогда не было доступно. Следующий раз эта же идея всплыла, когда увидел вполне играбельные эмуляторы старых консолей. Тогда стало ясно, что вбивать листинг в саму консоль и необязательно. Где-то очень потом появился Хабр с благожелательной аудиторией для таких вещей. В какой-то момент даже начал собирать разрозненную инфу чтобы написать мануал самому, и вот сегодня наткнулся на готовый учебник, который явно надо перевести.


            Разработка под старые консоли документирована вдоль и поперек, но именно по NES 99% информации относятся к разработке на Ассемблере. Меня почему-то зарубило, что надо освоить именно работу с С.


            следующая >>>
            image

            Читать дальше →
            • +52
            • 23,7k
            • 5
          • Лабораторная работа: введение в Docker с нуля. Ваш первый микросервис

            • Tutorial
            Привет, хабрапользователь! Сегодня я попробую представить тебе очередную статью о докере. Зачем я это делаю, если таких статей уже множество? Ответов здесь несколько. Во-первых не все они описывают то, что мне самому бы очень пригодилось в самом начале моего пути изучения докера. Во-вторых хотелось бы дать людям к теории немного практики прямо по этой теории. Одна из немаловажных причин — уложить весь накопленный за этот недолгий период изучения докера опыт (я работаю с ним чуть более полугода) в какой-то сформированный формат, до конца разложив для себя все по-полочкам. Ну и в конце-концов излить душу, описывая некоторые грабли на которые я уже наступил (дать советы о них) и вилы, решение которых в докере просто не предусмотрено из коробки и о проблемах которых стоило бы задуматься на этапе когда вас распирает от острого желания перевести весь мир вокруг себя в контейнеры до осознавания что не для всех вещей эта технология годна.

            Что мы будем рассматривать в данной статье?

            В Части 0 (теоретической) я расскажу вам о контейнерах, что это и с чем едят
            В Частях 1-5 будет теория и практическое задание, где мы напишем микросервис на python, работающий с очередью rabbitmq.
            В Части 6 — послесловие
            Читать дальше →
          • Советуют разработчики: подборка популярных книг о программировании, языках, алгоритмах

              В сегодняшнем материале мы собрали одни из наиболее популярных книг, отобранных самими разработчиками — резидентами Reddit, Quora, Stack Exchange, Stack Overflow и Hacker News.

              В нашу подборку попали работы по популярным языкам программирования, проектированию ПО, работе с Linux-системами, сборники практических советов для разработчиков — от начинающих, до опытных. Объединяют эту подборку высокие оценки самих программистов, которым эти книги помогали на разных этапах их карьеры.

              Читать дальше →
            • Как выйти на путь разработки ОС

              Данная статья служит одной простой цели: помочь человеку, который вдруг решил разработать свою операционную систему (в частности, ядро) для архитектуры x86, выйти на тот этап, где он сможет просто добавлять свой функционал, не беспокоясь о сборке, запуске и прочих слабо относящихся к самой разработке деталей. В интернете и на хабре в частности уже есть материалы по данной теме, но довольно трудно написать хотя бы “Hello world”-ядро, не открывая десятков вкладок, что я и попытаюсь исправить. Примеры кода будут по большей части на языке C, но многие другие языки тоже можно адаптировать для OSDev. Давно желавшим и только что осознавшим желание разработать свою операционную систему с нуля — добро пожаловать под кат.
              Читать дальше →
            • Запуск/отладка Python скриптов в контейнерах LXC/LXD из под VS Code

              Привет, Хабр!

              В этой статье хочется поделится с вами настройкой девелоперского окружения под разработку скриптов на Python и запуск их в изолированном окружении, практически за пару кликов в редакторе VS Code.

              В качестве изолированного окружения будет рассмотрена первичная настройка и создание контейнера на базе LXC под управлением ОС Ubuntu 17.10. Почему не Docker? Сложно ответить, выдать какие-то аргументы. От части концепция виртуализации ОС субъективно ближе по духу, чем виртуализация процессов, но принцип который здесь будет изложен, с некоторыми поправками, подойдет к запуску кода в Docker-контейнерах.



              Что вы получите?


              • Научитесь запускать в один клик python-скрипты в контейнере, а также удаленный debug из VS Code
              • Узнаете как установить LXD, настроить сеть и запустить первый контейнер
              • Ознакомитесь с установкой и настройкой редактора исходного кода VS Code, набором расширений которые позволят комфортно писать и отлаживать код.

              Чего здесь не будет?


              • Не будет полного обзора LXC/LXD, вам придется самостоятельно найти дополнительную информацию о Linux-контейнерах.
              • Не будет рассмотрен python модуль virtualenv для создания виртуального окружения на хосте разработчика как альтернатива контейнерам.
              • Не будет сравнения в духе Docker vs LXD, выводы вы сделаете самостоятельно на основании вашего опыта.
              Читать дальше →
            • Создание библиотеки компонентов с использованием Storybook

              Введение


              image

              В наши дни разработка интерфейса является достаточно затратным процессом который требует усилий от множества людей, разработчиков, дизайнеров, тестировщиков продукт менеджеров и так далее.

              Компании все чаще прибегают к написанию интерфейса состоящего из множества независимых компонентов, которые могут быть использованы повторно. Многие дизайнеры создают дизайн проект который описывает каждую деталь дизайна. Они используют ряд инструментов для документирования интерфейсов, первые которые приходят на ум это axshare.com и zeplin.com. Тот же фотошоп, в котором у них все разложено строго по папочкам. Это позволяет им с легкостью работать над дизайном проекта, обновлять и добавлять новые страницы, просто копируя уже имеющиеся наработки.
              Читать дальше →
              • +12
              • 7,5k
              • 1
            • Как принять участие в ICO на базе Ethereum. Инструкция для новичка

              Хайп вокруг ICO растёт и ширится, всё новые и новые проекты объявляют о сборе инвестиций этим способом.

              Плюсов для команд много, но и для участников ICO, то есть инвесторов, их достаточно. Во-первых, это потенциал роста стоимости токенов. Особенно, если вы участвуете в pre-ICO, когда токены продаются за полцены или даже дешевле. Представьте, если бы вы купили акции Apple, Google или Microsoft на десяток долларов в момент их выхода на биржу, да ещё со скидкой 50%?

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

              Всё это очень хорошо и привлекательно, но как же принять участие в ICO человеку, который до 2017 года слышать-то слышал, но не имел никакого практического опыта с криптовалютами? Давайте разберёмся.
              Читать дальше →
            • Приглашаем на mini ai cups

                image


                Вот уже пять лет мы проводим russian ai cup, крупнейший в СНГ ежегодный чемпионат по искусственному интеллекту (а если проще — по написанию ботов для игр). И вот уже семь лет участники этого чемпионата просят либо оставлять песочницу работать весь год, либо запустить площадку, где можно было бы весь год играться в подобные же конкурсы, только чуть меньше размером.


                Мы подумали и решили опробовать второй вариант — открыли новую площадку с мини-конкурсами, связанными с искусственным интеллектом и написанием ботов для игр. Встречайте новый для нас класс чемпионатов — http://aicups.ru/.

                Читать дальше →
              • Конкурс по программированию: JSDash

                  UPDATE: Конкурс завершён. Итоги.

                  Компания Hola объявляет долгожданный летний конкурс по программированию! Победителей ожидают призы:

                  1. Первое место: 3000 USD.
                  2. Второе место: 2000 USD.
                  3. Третье место: 1000 USD.
                  4. Если Вы отправите кому-то ссылку на этот конкурс, поставив наш адрес в CC, и этот человек займёт призовое место, Вы получите половину суммы приза (разумеется, не в ущерб награде победителя). За одного победителя такую награду может получить только один человек — тот, кто отправил ссылку первым.

                  Авторы интересных решений будут приглашены на собеседования.



                  Правила



                  Условия конкурса на английском языке размещены на GitHub. Ниже — перевод на русский язык.

                  Читать дальше →
                • «Они нас точно слышат»: как воспринимают звук животные

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

                    Есть и звери, у которых ушей нет. Это не делает их глухими. Диапазон звуков, которые могут воспринимать некоторые животные, сильно отличается от «человеческого». Обо всём этом продолжим говорить под катом.

                    Читать дальше →
                  • Какие игры запустятся на системнике за 3000 рублей? Покупаем и тестируем с Playkey

                    Три тысячи рублей. Ужин на двоих в не слишком дорогом ресторане или потрёпанный системник?

                    Выбор очевиден — решили мы. А заодно на нём можно провести уникальные плейтесты самых разных игр. И рассказать об этом в этой публикации!

                    Системники-претенденты для этой статьи мы искали на Avito. И быстро нашли вот такого красавца:



                    Хо-хо! Выглядит прекрасно, и начинка за 3000 рублей вполне достойная. Две планки памяти 2x1Gb DDR2-800, встроенная видеокарта Intel GMA X4500, жесткий диск на 320Gb и двухъядерный камень Core2Duo E7400 2800MHz.

                    Один звонок, и мы уже выдвигаемся забирать этот прекрасный системный блок, чтобы протестировать на нем самые разные игрушки в спектре от TES: Skyrim до Wolf Among Us и Mass Effect. Плюс пару горячих новинок: DOOM и Quantum Break. Готов, системник?

                    Поехали!
                    Читать дальше →
                  • Руководство начинающего программиста графических шейдеров

                    • Перевод
                    • Tutorial
                    Умение писать графические шейдеры открывает перед вами всю мощь современных GPU, которые сегодня уже содержат в себе тысячи ядер, способных выполнять ваш код быстро и параллельно. Программирование шейдеров требует несколько иного взгляда на некоторые вещи, но открывающийся потенциал стоит некоторых затрат времени на его изучение.

                    Практически каждая современная графическая сцена являет собой результат работы некоторого кода, написанного специально для GPU — от реалистичных эффектов освещения в новейших ААА-играх до 2D-эффектов и симуляции жидкости.

                    image
                    Сцена в Minecraft до и после применения нескольких шейдеров.

                    Цель этой инструкции


                    Программирование шейдеров иногда кажется загадочной черной магией. Тут и там можно встретить отдельные куски кода шейдеров, которые обещают вам невероятные эффекты и, возможно, вправду способны их обеспечить — но при этом совершенно не объясняют, что именно они делают и как добиваются столь впечатляющих результатов. Данная статья попробует закрыть этот пробел. Я сфокусируюсь на базовых вещах и терминах, касающихся написания и понимания шейдерного кода, так что впоследствии вы сами сможете менять код шейдеров, комбинировать их или писать свои собственные с нуля.
                    Читать дальше →