Сегодня у меня необычный текст, совершенно не связанный с машинным обучением (для новых читателей: этот текст – часть блога компании Surfingbird, в котором я в течение последнего года рассказывал о разных аппаратах машинного обучения в приложении к рекомендательным системам). В этом посте математической части практически будет, а будет описание очень простой программки, которую я написал для своих студентов. Вряд ли кто-то узнает для себя из этого поста много содержательно нового, но мне кажется, что некоторую ценность представляет сама идея – многие люди просто не задумываются о том, что «и так можно». Итак…
Рубрика «c++» - 238
Дискретная математика для первокурсников: опыт преподавателя
2013-03-04 в 12:32, admin, рубрики: c++, Блог компании Surfingbird, дискретная математика, образование, студентам, Учебный процесс в IT, метки: дискретная математика, образование, студентамУскорение криптоопераций или опыт портирования под Android
2013-03-04 в 6:06, admin, рубрики: android, c++, Блог компании Intel, криптография, Программирование, Разработка под android, метки: android, c++, crypto, криптография В состав платформы Android входит фреймворк Bouncycastle, предназначенный для выполнения криптоопераций, например, шифрования или проверки цифровой подписи. Отличительной чертой данного фреймворка является то, что он целиком написан на Java, без применения нативного кода. Это увеличивает его переносимость, однако значительно уменьшает быстродействие. В первом приближении реализация криптофункций с помощью нативного кода может дать значительный прирост производительности. Это может существенно увеличить быстродействие приложения, использующего криптографию. Посмотрим, подтвердится ли это предположение.
Данным постом я хочу начать серию статей о создании модуля, выполняющего криптооперации на примере шифрования/расшифровки симметричным алгоритмом AES. Для начала необходимо понять, какой прирост производительности может дать применение нативного кода по сравнению со встроенной в ОС реализацией.
Читать полностью »
Boost Signals — сигналы и слоты для C++
2013-03-03 в 22:01, admin, рубрики: boost, c++, c++11, signals, С++, метки: boost, c++11, signals, С++
О чем эта статья
Сегодня я расскажу про библиотеку Boost Signals — про сигналы, слоты, соединения, и как их использовать.
Сигнал — это тип данных, который может хранить в себе несколько функций обратного вызова, и вызывать их.
Слот — это, соответственно, и есть подсоединяемые к сигналу функции.
Как уже было сказано, к одному сигналу можно подключить несколько функции, и при вызове сигнала, подключенные функции вызываются в порядке их подключения.
Похожую систему иногда называют событийной, тогда сигналы — это события, а слоты — это подписанные на определенные события обработчики.
Привязка свойств и декларативный синтаксис в C++
2013-03-03 в 18:59, admin, рубрики: c++, c++11, QML, qt, Qt 5, qt quick, Qt Software, Программирование QtQuick и QML образуют по-настоящему хороший язык для разработки пользовательских интерфейсов. Привязки QML очень производительны и удобны. Декларативный синтаксис действительно приятен в работе. Возможно ли сделать то же самое на C++? В этом посте я покажу рабочую реализацию привязки свойств на чистом C++.
Внимание: это было сделано для забавы, а не для использования в реальном проекте.
Читать полностью »
Возрождение Framework-а (Загрузка)
2013-03-03 в 12:04, admin, рубрики: c++, dsl, json, marmalade, Разработка под android, разработка под iOS, метки: dsl, json, marmalade Сегодня я хочу продолжить описание процесса разработки новой версии Marmalade Framework. В этой части я расскажу о создании подсистемы загрузки конфигурации, поддерживающей формат описания, о котором я рассказывал ранее. Основной сложностью, с которой придется столкнуться на этом шаге, будет поддержка шаблонов (templates), в том числе и локальных.
Читать полностью »
QML и C++. Гоняем данные, оцениваем скорость взаимодействия
2013-03-02 в 10:21, admin, рубрики: c++, QML, qt, Qt Software, QtQuick, Программирование, метки: c++, QML, Qt, QtQuickО том как отправлять данные из QML в C++ и после манипуляций с ними возвращать их (данные) обратно, было уже неоднократно рассказано. В большинстве статей приводятся одни и те же примеры или, в лучшем случае, слегка измененные авторами статей.
Давайте рассмотрим пару самых явных способов передавать данные из QML в C++ и обратно. Также оценим их эффективность.Читать полностью »
Создаем свой архиватор в 200 строчек кода
2013-02-27 в 18:57, admin, рубрики: c++, архивация, Песочница, файлы, метки: c++, архивация, файлыАрхивы в современное время играют немаловажную роль в хранении данных. Они позволяют хранить внутри себя набор разнообразных файлов. Это достаточно удобно, например, для передачи данных по сети — легче передавать один файл, чем несколько. Также архивы позволяют хранить информацию в удобной структурированной форме. Вы это, несомненно, осознавали и до этого.
В данной статье мы попробуем разработать собственный кроссплатформенный консольный архиватор с поддержкой как архивации, так и распаковки ранее запакованых файлов. Требуется уложиться в 200 строчек кода. Писать будем на C++, используя при этом лишь его стандартные библиотеки. Поэтому привязанности к определенной платформе нет — работать это будет и в Windows, и в Linux.
Почему C++, а не привычный C? Не то, что бы я имею что-то против СИ, просто в нем достаточно проблематично работать со строками и, к тому же, отсутствует ООП. Следовательно, если бы мы использовали C, то в 200 строк, думаю, вряд ли бы уложились. Ну, да ладно, приступим же!
Intro
Для начала немного теории. Думаю, все, кто читает эту статью, прекрасно знают, что любой файл — это обыкновенная последовательность байт, которой оперирует процесс, открывший файл( ресурс ). Файлы — это последовательность байт, которая приобретает различные формы в пределах файловой системы. Формы — это типы файлов, их назначения. Для операционной системы файлы — это байты, о назначении которых ей ничего не известно.
Стандартные потоки вывода также манипулируют последовательностью байт, попутно модифицируя их( это зависит от класса потока, некоторые потоки являются «сырыми», т.е работают, непосредственно, с байтами ).
Так что же требуется знать, чтобы написать архиватор? Думаю, кроме наличия некоторых знаний уровня «выше базового», касающихся C++, лишь то, что файл — это байты. И ничего более.
Нужна ли разработчику виртуальная машина, и насколько
2013-02-27 в 15:55, admin, рубрики: c++, виртуальные машины, операционные системы, Песочница, Программирование, разработка, метки: c++, виртуальные машины, операционные системы, ПрограммированиеЦели и задачи
Для того, чтобы не сильно зависеть от железа, от апгрейдов, от всяких драйверов и иже с ними, хотелось бы перевести среду разработки и работы в целом в виртуальномашинное русло.
Поднадоело тратить время и нервы на установки ОС и нужного софта, на резервирование и восстановление рабочей среды, на зависимость от плохого (быстро дряхлеющего/неохотно обновляемого) железа.
В общем то я и не прочь когда надо установить что-нибудь заново, при этом освежая свои знания о некоторых довольно редко устанавливаемых продуктах. Но как то хочется всё-таки не растрачивать такой ценный ресурс как Время и Спокойствие. Со Временем у меня особые отношения — непримиримые.
Также сказывается это и на сроках выполнения некоторых производственных задач, которые в случае авралов и пожаров приходится делать и в дороге, и на коленке, и дома. Да и где угодно. При этом не тратя время на создание и настройку среды для работы, или потратив по минимуму.
Техническое задание
Создать и опробовать виртуальную машину (ВМ) на разных инструментах. Проверить работоспособность установленных в ВМ средств.
Учитывать размеры образа ВМ, занимаемые ресурсы на хостовой ОС, портативность, легкость установки и начала использования на любом железе с нуля.
Модульное тестирование и непрерывная интеграция при помощи Jenkins для C++ проектов
2013-02-26 в 20:00, admin, рубрики: c++, Jenkins, netbeans, tdd, unit test, Программирование, метки: c++, Jenkins, netbeans, tdd, unit testДумаю, что все знают, что такое модульные тесты, все знают или, по крайней мере, слышали, что такое непрерывная интеграция, и многие программируют на C++. Но я столкнулся с тем, что в интернете не так много информации о том, как же это все объединить и заставить работать вместе. Эта статья является попыткой дать новичками пошаговую инструкцию, которая позволит сделать первый шаг в создании модульных тестов для C++ проектов и организовать покоммитный прогон модульных тестов при помощи CI сервера.
Внимание: много букв и скриншотов, половина из которых избыточны. Особенно для тех кто уже в теме.
Система кэширования zero-cache
2013-02-24 в 18:48, admin, рубрики: c++, nosql, Песочница, я пиарюсь, метки: c++, nosql, я пиарюсь Статья рассказывает о разработке специализированной системы кэширования данных, ориентированной на использование в системах реального времени. Из этой истории разработки станут понятные некоторые архитектурные решения и отличия zero-cache от существующих систем кэширования.
Читать полностью »