Как стать автором
Обновить
43
0
Dmitry @RPG18

Golang Developer

Отправить сообщение

Рисуем карту сервисов при помощи Qt Quick и GraphViz

Время на прочтение7 мин
Количество просмотров2.2K

Решил запрототипировать два представления в дополнение к стандартному Jaeger UI. Это построение карты сервисов по трейсу; просмотрщик логов без пиксельхантинга и разворачивания спанов. Для виджетов есть обертка в виде nbergont/qgv, а хочется сделать на QtQuick.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии1

WebAssembly объединит их всех

Время на прочтение10 мин
Количество просмотров6.8K

Задумался о том что бы прикрутить к своему пет проекту систему плагинов на WebAssembly. Это потенциально позволит переиспользовать существующий код на Go, C++, Rust, если конечно же он есть. А так же избавится от so/dll, что удобно при распространении плагинов, когда проект представляет собой десктопное приложение и собирается под Windows, OSX, GNU/Linux. Поэтому пошел смотреть как это сделано в Envoy.

Читать далее
Всего голосов 11: ↑11 и ↓0+11
Комментарии7

Десктопный клиент для Apache Kafka, преобразуем protobuf в json

Время на прочтение5 мин
Количество просмотров2.8K

Продолжаю делать пилить свой petproject. Что нового с прошлой публикацией: запись; сообщений в кафку; создание/удаление топиков; бинарные сборки для OSX и Windows.

Сейчас подошел к тому ради чего все это затевалось: декодирование protobuf без schema registry и кодогенерации и всё это на C++.

Читать далее
Рейтинг0
Комментарии0

Делаем свой десктопный GUI к Apache Kafka или Conduktor для обездоленных

Время на прочтение5 мин
Количество просмотров7.2K

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

Шекспир, Генрих IV

Как-то так сложилось, что у нас не так много UI для Apache Kafka. А если хочется именно desktop, то Offset Explorer и упомянутый Conduktor. Первый имеет морально устаревший интерфейс 2000х, а второй не оправдано дорогой, т. к. не использую весь его богатый функционал. Вооружившись Qt и librdkafka, набросал conduktor на минималках.

Пошли разбираться в QtQuick
Всего голосов 7: ↑7 и ↓0+7
Комментарии8

Запускаем AssemblyScript в Go

Время на прочтение10 мин
Количество просмотров3.2K

Пока одни обсуждают что не так с WebAssembly, я думаю как его можно использовать вне браузера. Например написание wasm фильтров для Envoy. AssemblyScript был взят потому, что это не C++ и не Rust, т.е. ожидается более низкий порог вхождения. Под катом будет дико примитивный код и пару бенчмарков. Картинка взята из бенчмарка.


Читать дальше →
Всего голосов 8: ↑7 и ↓1+9
Комментарии3

Буфера на стеке горутины

Время на прочтение7 мин
Количество просмотров4.1K

Задался вопросом размещением массивов и слайсов на стеке, подобно std::array в C++ и массивам в Си. Про стек хорошо написал Vincent Blanchon в статье Go: How Does the Goroutine Stack Size Evolve?. Винсент рассказывает про изменения стека в горутинах. Резюмируя:


  • минимальный размер стека 2 KB;
  • максимальный размер зависит от архитектуры, на 64 битной архитектуре 1 GB;
  • каждый раз размер стека увеличивается вдвое;
  • стек как увеличивается, так и уменьшается.

Выясню сколько можно положить на стек и какой оверхед может с собой принести.

Читать дальше →
Всего голосов 15: ↑12 и ↓3+14
Комментарии0

Расширяемый Postgres

Время на прочтение8 мин
Количество просмотров5.5K


На прошедшем PGConf.Russia был доклад про расширение MobilityDB, а Андрей Бородин предложил идею расширять методы индексов под задачу.


Продолжу тему с расширением Postgres под решаемую задачу на примере расширения сделанного в рамках HighLoad Cup 2018, код доступен на GithHub. На хабре уже есть статья от blackmaster. Расширение добавляет два типа с поддержкой btree и GIN индексов.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии17

Qt Everywhere: WebAssembly и WebGL стриминг

Время на прочтение3 мин
Количество просмотров9.2K

Qt Everywhere — так именуются архивы с исходниками Qt. В 5.12.0 завезут WebAssembly и WebGL стриминг и everywhere звучит уже по другому. Так и просилось что-нибудь запрототипировать. Был быстро накидан прототип чатика на веб-сокетах, что бы протестировать поддержку сети. Под катом будет инструкция по сборке и запуска проекта на WebAssembly, пример вызова JavaScript из С++.

Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии10

Опыт с WebAssembly или как С++ undefined behavior выстрелил в ногу

Время на прочтение6 мин
Количество просмотров7K

На прошедшем C++ Russia 2018 мы рассказывали о нашем опыте перехода на WebAssembly, как наткнулись на UB и как его героически закостыляли, немного о самой технологии и как работает на разных устройствах. Под катом же будет текстовая версия всего относительно UB. Код используемых тестов доступен на GitHub.


Читать дальше →
Всего голосов 25: ↑22 и ↓3+19
Комментарии6

C++ креши в WebAssembly на разных браузерах

Время на прочтение2 мин
Количество просмотров4.3K

Заметка задумывалась как продолжение предыдущей заметки о том, как собираем C++ креши на различных платформах включая asm.js и wasm. По количеству материала, это тянет только на заметку, а не полноценную статью, да и нужно быть наркоманом, что бы делать нативный клиент на C++, а потом засовывать его в браузер.


Но! Мы недавно делали доклад об опыте использования wasm на cppconf. Оказалось, что наркоманов больше чем я думал, да и новость Beta for Qt for WebAssembly Technology Preview. Данная заметка может быть полезна, если вы захотите сделать отлов крешей в production окружении.


Под катом:


  • отлов падений в asm.js и wasm;
  • как выглядит стек вызовов в Safari, Firefox, Chrome.
Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии0

Граббер для одного книжного сайта

Время на прочтение4 мин
Количество просмотров26K

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

Читать дальше →
Всего голосов 34: ↑33 и ↓1+32
Комментарии13

Еще один breakpad сервер. Часть 1

Время на прочтение6 мин
Количество просмотров4.4K

В прошлом квартале делали MVP сервиса по обработке крешей. Аналог Socorro от Mozilla, но с учетом своих требований. Код сервиса будет выкладываться на GitHub по мере рефакторинга. Утилиты, о которых пойдет речь в этой статье, доступны тут.


У нас были следующие требования:


  • получение отчета с Windows, Mac OS X, GNU/Linux;
  • получение отчета о падения с веба(собираем через emscripten);
  • сбор данных об оборудовании(CPU, GPU, Memory);
  • группировка падений по версии, платформе, пользователю, причине;
  • приложение ведет логи, нужно вместе с отчетом хранить и лог.

Содержание:


  • Breakpad: файлы символов и отчеты о падениях;
  • Emscripten: параметры компиляции, файлы символов, обработка ошибок;
  • UI.
Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Комментарии2

Лепим микросервис

Время на прочтение6 мин
Количество просмотров15K

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


Используемые компоненты:



Для примера буду делать микросервис для выдачи рейтинга игроков. От ядра системы в микросервис приходят следующие сообщения:


  • player_registered(id,name);
  • player_renamed(id,name);
  • player_won(id, points).

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

Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии8

Задачка на std::multiset или поиск по полям структуры

Время на прочтение6 мин
Количество просмотров12K

Попалась небольшая задачка, где-то на 4 часа кодирования, которую счел занимательной.


Есть база пользователей 10 миллионов:


class User{
 int id; 
 time_t birthday; // дата рождения
 int gender;      // пол
 int city_id;     // место проживания
 time_t time_reg; // дата регистрации
};

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


  • город;
  • город, пол;
  • пол, возраст.

Данные выдачи должны быть отсортированы по дате регистрации пользователей, и выдаваться постранично по 100 пользователей.


Подсказка 1: СУБД не даст нужной скорости.
Подсказка 2: Вспомнить сложность операций со множествами, сложность стандартных алгоритмов.
Подсказка 3: Проверить время поиска реализованного алгоритма, неплохой результат это порядка 0.005 сек.

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Комментарии26

MapReduce в Qt Concurrent

Время на прочтение4 мин
Количество просмотров13K

MapReduce в Qt
На картинке изображен MapReduce в том виде, в каком он реализован в Qt:


QFuture<T> QtConcurrent::mappedReduced(const Sequence &sequence,
    MapFunction mapFunction, ReduceFunction reduceFunction /*...*/)
T QtConcurrent::blockingMappedReduced(const Sequence &sequence,
    MapFunction mapFunction, ReduceFunction reduceFunction /*...*/)

Столкнулся с тем, что коллеги на работе не знают про MapReduce в Qt Concurrent. Как говорил Гёте: "Чего мы не понимаем, тем не владеем". Под катом будет немножко про Map, про Reduce, про Fork–join model и пример решения простой задачки при помощи MapReduce.

Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии9

Применение Q_GADGET в C++&QtQuick

Время на прочтение3 мин
Количество просмотров16K

Смотрю на форумах рунета, люди начинают писать на C++&Qt Quick и используют наследников от QObject, для так называемых типов значений(Value Type). Мартин Фаулер их называет Value Object. Хотя есть макрос Q_GADGET позволяющий использовать QMetaObject c некоторыми ограничениями, но без наследования от QObject. Все что будет описано ниже результат экспериментов с Qt Quick. Буду рад узнать что-то новое из комментариев.


Пример таких типов QPoint, QGeoCoordinate и т.д. Наследоваться от QObject и использовать макрос Q_OBJECT неудобно для таких типов:


  • QObject защищен от копирования;
  • нужно возвращать значение по указателю. Приходится задумываться о CppOwnership/JavaScriptOwnership из перечисления QQmlEngine::ObjectOwnership.

Q_GADGET позволяет нам использовать:


  • Q_ENUM;
  • Q_PROPERTY;
  • Q_INVOKABLE.

Ограничение:


  • Отсутствие поддержки сигналов и слотов.
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии12

GPS трекер на Qt, карта и трек

Время на прочтение2 мин
Количество просмотров22K

Решил попрактиковаться в программирование под Android на Qt. В качестве темы выбрал GPS трекер.
Набор функций этого трекера:


  • снимать измерения с GPS приемника;
  • экспортировать трек в GPX (GPS eXchange Format);
  • выводить трек на карту;
  • выводить время в пути, длину пути, среднюю скорость.

Под катом будет приведен пример работы с картой в QtQuick.


Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии11

Synology DSM, Perl и Mojolicious

Время на прочтение4 мин
Количество просмотров4.4K

Раз вспомнили про Synology DSM в Одновременное монтирование зашифрованных папок в Synology DSM, то решил показать как при помощи Perl и веб фреймворка Mojolicious сделать простое приложение под свои нужды. Мне пришлось написать на коленке утилиту SynDevInfo, для вывода необходимой информации по устройству в браузере, т.к. уважаемый support не знает GNU/Linux, а пользователи не могут зайти по ssh.


Под катом будет описана структура пакета, скрипт запуска приложения и сам скрипт на Mojolicious::Lite

Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии4

Японские кроссворды на QtQuick

Время на прочтение7 мин
Количество просмотров9.4K

Череп и кости, КДПВ


Люблю в свободное время что-нибудь прототипировать. Это позволяет поизучать что-то новое. Данный прототип является клиентом для ресурса http://www.nonograms.ru/, разработчиком которого является Чугунный К.А/ KyberPrizrak /. Весь код доступен на GiHub. На стороне C++ работа с HTML, модель галереи. На стороне QtQuick визуализация.


В этот раз решил поковырять:


  • Q_GADGET и его использование в Qml;
  • есть ли жизнь без Qt WebKit;
  • поковырять Qt Labs Controls.


    Что сделано:


  • галерея кроссвордов;
  • разгадывание кроссворда.

Под катом будет рассмотрено:


  • скриншоты;
  • как получить HTML без Qt WebKit;
  • как сделать кроссворд без Canvas.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии7

Парсим HTML на C++ и Gumbo

Время на прочтение5 мин
Количество просмотров45K

Gumbo — это парсер HTML5 на Си. Пока что Gumbo предоставляет только дерево, но никаких удобных функций для работы с ним. Поэтому написал парочку вспомогательных классов:
  • STL совместимый итератор обхода дерева в глубину;
  • компараторы для поиска по тегу, атрибуту;
  • пара фасадов.

Под катом будет пример разбора страницы habrahabr.ru/all/
Читать дальше →
Рейтинг0
Комментарии0
1

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность