Pull to refresh
44
0
Dmitry @RPG18

Golang Developer

Send message

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

Reading time7 min
Views2.3K

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

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments1

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

Reading time10 min
Views6.9K

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

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments7

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

Reading time5 min
Views3.2K

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

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

Читать далее
Rating0
Comments0

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

Reading time5 min
Views7.7K

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

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

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

Пошли разбираться в QtQuick
Total votes 7: ↑7 and ↓0+7
Comments8

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

Reading time10 min
Views3.3K

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


Читать дальше →
Total votes 8: ↑7 and ↓1+9
Comments3

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

Reading time7 min
Views4.2K

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


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

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

Читать дальше →
Total votes 15: ↑12 and ↓3+14
Comments0

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

Reading time8 min
Views5.5K


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


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

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments17

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

Reading time3 min
Views9.4K

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

Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments10

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

Reading time6 min
Views7.1K

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


Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments6

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

Reading time2 min
Views4.3K

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


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


Под катом:


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

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

Reading time4 min
Views27K

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

Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments13

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

Reading time6 min
Views4.5K

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


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


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

Содержание:


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

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

Reading time6 min
Views15K

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


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



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


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

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

Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments8

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

Reading time6 min
Views12K

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


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


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

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


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

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


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

Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments26

MapReduce в Qt Concurrent

Reading time4 min
Views13K

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.

Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments9

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

Reading time3 min
Views17K

Смотрю на форумах рунета, люди начинают писать на 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.

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


  • Отсутствие поддержки сигналов и слотов.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments12

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

Reading time2 min
Views22K

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


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

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


Читать дальше →
Total votes 13: ↑12 and ↓1+11
Comments11

Synology DSM, Perl и Mojolicious

Reading time4 min
Views4.4K

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


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

Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments4

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

Reading time7 min
Views9.5K

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


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


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


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


    Что сделано:


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

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


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

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

Reading time5 min
Views46K

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

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

Information

Rating
6,316-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity