Метка «c++» - 46

Введение

На хабре уже несколько раз упоминалась система генерации скриптов сборки и проектных файлов CMake. Система достаточно популярна и неплохо документирована. Не все знают, что есть неплохая альтернатива этой (безусловно, замечательной) системе. Да, речь в статье пойдёт о проекте Generate Your Project (GYP).

Предыстория

GYP разрабатывался для сборки конкретного проекта — браузера Chrome/Chromium. Решение разрабатывать свой инструмент вызвало множество споров, многие не понимали (возможно, до сих пор не понимают), зачем изобретать свой «велосипед». Тем не менее, GYP стал довольно популярным инструментом, и сейчас он используется за пределами инфраструктуры Chromium, например, для сборки V8 и нативных модулей NodeJS.
Читать полностью »

Ускорение криптоопераций или опыт портирования под AndroidВ состав платформы Android входит фреймворк Bouncycastle, предназначенный для выполнения криптоопераций, например, шифрования или проверки цифровой подписи. Отличительной чертой данного фреймворка является то, что он целиком написан на Java, без применения нативного кода. Это увеличивает его переносимость, однако значительно уменьшает быстродействие. В первом приближении реализация криптофункций с помощью нативного кода может дать значительный прирост производительности. Это может существенно увеличить быстродействие приложения, использующего криптографию. Посмотрим, подтвердится ли это предположение.
Данным постом я хочу начать серию статей о создании модуля, выполняющего криптооперации на примере шифрования/расшифровки симметричным алгоритмом AES. Для начала необходимо понять, какой прирост производительности может дать применение нативного кода по сравнению со встроенной в ОС реализацией.
Читать полностью »

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

Автоматический поворот изображения на мониторе

Я долго с этим мирился, пока не вспомнил про вертикальные мониторы. А почему нет? Чем я хуже? Вот тогда я и решил немного переоборудовать свое рабочее место. Можно было бы сделать крепеж и навсегда перевести монитор в вертикальное положение, но меня это не устраивало по той причине, что на моем «мониторе» я часто смотрю фильмы. А вертикальные фильмы, слава богу, пока еще не снимают. В этот момент появилась идея приобрести поворотный кронштейн и повесить телевизор на стену, чтобы при необходимости его вертеть. Именно так я и поступил.
Читать полностью »

О том как отправлять данные из QML в C++ и после манипуляций с ними возвращать их (данные) обратно, было уже неоднократно рассказано. В большинстве статей приводятся одни и те же примеры или, в лучшем случае, слегка измененные авторами статей.

Давайте рассмотрим пару самых явных способов передавать данные из QML в C++ и обратно. Также оценим их эффективность.Читать полностью »

Если Вы программируете на Си и Вам не хватает типизированных контейнеров, которые есть в языках высокого уровня, добро пожаловать под кат:
Читать полностью »

В последнее время на различных ресурсах появляются сообщения о том, что злоумышленники все чаще используют для осуществления DDoS-атак серверные конфигурации. Очевидно, что для использования такой системы необходимо сначала получить к ней доступ. Не так давно я столкнулся с довольно интересным, как мне показалось, образцом PHP Shell'а.
Читать полностью »

Архивы в современное время играют немаловажную роль в хранении данных. Они позволяют хранить внутри себя набор разнообразных файлов. Это достаточно удобно, например, для передачи данных по сети — легче передавать один файл, чем несколько. Также архивы позволяют хранить информацию в удобной структурированной форме. Вы это, несомненно, осознавали и до этого.

В данной статье мы попробуем разработать собственный кроссплатформенный консольный архиватор с поддержкой как архивации, так и распаковки ранее запакованых файлов. Требуется уложиться в 200 строчек кода. Писать будем на C++, используя при этом лишь его стандартные библиотеки. Поэтому привязанности к определенной платформе нет — работать это будет и в Windows, и в Linux.
Почему C++, а не привычный C? Не то, что бы я имею что-то против СИ, просто в нем достаточно проблематично работать со строками и, к тому же, отсутствует ООП. Следовательно, если бы мы использовали C, то в 200 строк, думаю, вряд ли бы уложились. Ну, да ладно, приступим же!

Intro

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

Так что же требуется знать, чтобы написать архиватор? Думаю, кроме наличия некоторых знаний уровня «выше базового», касающихся C++, лишь то, что файл — это байты. И ничего более.

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

Цели и задачи

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

Техническое задание

Создать и опробовать виртуальную машину (ВМ) на разных инструментах. Проверить работоспособность установленных в ВМ средств.
Учитывать размеры образа ВМ, занимаемые ресурсы на хостовой ОС, портативность, легкость установки и начала использования на любом железе с нуля.

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

Думаю, что все знают, что такое модульные тесты, все знают или, по крайней мере, слышали, что такое непрерывная интеграция, и многие программируют на C++. Но я столкнулся с тем, что в интернете не так много информации о том, как же это все объединить и заставить работать вместе. Эта статья является попыткой дать новичками пошаговую инструкцию, которая позволит сделать первый шаг в создании модульных тестов для C++ проектов и организовать покоммитный прогон модульных тестов при помощи CI сервера.

Внимание: много букв и скриншотов, половина из которых избыточны. Особенно для тех кто уже в теме.

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

О компиляторах и интерпретаторах
Если ты всегда мечтал написать свой язык программирования — добро пожаловать. Здесь ты наверняка найдёшь для себя что-нибудь интересное.

GitHub-юзер yawnt собрал чудесную подборку ссылок для любителей драконов, языков и прочих вкусных внутренностей. А знающие камрады в комментариях наверняка поделятся с тобой и другими яствами.

Пишет yawnt следующее:

С каждым днём мне всё интереснее тема компиляторов, интерпретаторов и дизайна языков программирования в целом. И я решил поделиться с народом ссылками на собранные мной материалы (большую часть мне самому ещё предстоит прочитать :<). Надеюсь, кому-нибудь они окажутся полезными.

Я не включил (и не собираюсь) в список ссылки на официальную документацию, т. к. считаю очевидным, что первым делом следует смотреть именно туда ;P.
Читать полностью »


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