Обновить

Задачи из Jira и GitHub, встречи и заметки в одном окне: полгода соло‑разработки на Qt 6 / C++20

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.2K
Всего голосов 1: ↑1 и ↓0+1
Комментарии8

Комментарии 8

Было бы прикольно, но всё это прекрасно делается в emacs (и в нём же делается вообще всё остальное).

И release notes для него пишут люди, и читать их возможно.

У меня пять каналов, по которым прилетают задачи: YT, почта (MS Exchange + Outlook), созвоны, совещания и PDM. Задолбавшись в какой-то момент переключаться между этим зоопарком, тоже подумывал о такой штуке. Прототип в Excel не взлетел. Пока у тебя пять задач, это нормально. Когда у тебя их 25 и больше - кранты. Поэтому со вздохом расчехлил Obsidian и стал сводить все задачи туда. Ограниченное количество статусов, сроки и другие информационные поля. И - самое главное - удобная стартовая страница с нужными мне выборками по полям с помощью DataView. Плюс Templater для упрощения заведения новых заметок. И наконец смог вздохнуть спокойно... Только вот по независящим от меня причинам поток задач снизился вчетверо, если не больше. Поэтому оценить эффективность системы не могу.

Вы только что описали проприетарную и тормозную версию org-mode.

Согласен. Но у меня клиент PDM отъедает ресурсов в два раза больше и тормозит раза в три сильнее, чем Obsidian.

А вы не пробовали собрать в виде webassemly? Ушли бы вопросы с деплоем. Хотя могут повылазить всякие platform-specific штуки.

И да, почему вы состояние храните в json? Можно же тот же SQLite заюзать?

я C++ Qt разработчик и как же я не люблю этот QStringLiteral... С точки зрения захламления исходного кода, тестов и тд

Для сравнения

До

ProviderDescriptor redmine() {
  ProviderDescriptor d;
  d.id = QStringLiteral("redmine");                 // stable: it keys settings and secrets
  d.displayName = QStringLiteral("Redmine");
  d.uiFields = {plain(QStringLiteral("host"), QStringLiteral("Host"), QStringLiteral("https://redmine.example.com")),
                secret(QStringLiteral("token"), QStringLiteral("API key"))};
  d.requiredKeys = {QStringLiteral("host"), QStringLiteral("token")};
  d.secretKeys = {QStringLiteral("token")};         // keychain, never state.json
  d.baseUrlTemplate = QStringLiteral("{host}");
  d.auth.kind = AuthKind::CustomHeader;
  d.auth.headerName = "X-Redmine-API-Key";
  d.listPathTemplate = QStringLiteral("/issues.json?assigned_to_id=me&status_id=open&limit=100");
  d.paging.style = PageStyle::Offset;
  d.paging.offsetParam = QStringLiteral("offset");
  d.paging.pageSize = 100;
  d.fields.arrayPointer = QStringLiteral("issues");
  d.fields.id = QStringLiteral("id");
  d.fields.title = QStringLiteral("subject");
  d.fields.status = QStringLiteral("status.name");  // dot-paths into one issue object
  d.fields.urlTemplate = QStringLiteral("{baseUrl}/issues/{id}");
  d.fields.dueAt = QStringLiteral("due_date");
  return d;  // pull-only
}

После

ProviderDescriptor redmine() {
  ProviderDescriptor d;
  d.id = "redmine";                 // stable: it keys settings and secrets
  d.displayName = "Redmine";
  d.uiFields = {plain("host", "Host", "https://redmine.example.com"),
                secret("token", "API key")};
  d.requiredKeys = {"host", "token"};
  d.secretKeys = {"token"};         // keychain, never state.json
  d.baseUrlTemplate = "{host}";
  d.auth.kind = AuthKind::CustomHeader;
  d.auth.headerName = "X-Redmine-API-Key";
  d.listPathTemplate = "/issues.json?assigned_to_id=me&status_id=open&limit=100";
  d.paging.style = PageStyle::Offset;
  d.paging.offsetParam = "offset";
  d.paging.pageSize = 100;
  d.fields.arrayPointer = "issues";
  d.fields.id = "id";
  d.fields.title = "subject";
  d.fields.status = "status.name";  // dot-paths into one issue object
  d.fields.urlTemplate = "{baseUrl}/issues/{id}";
  d.fields.dueAt = "due_date";
  return d;  // pull-only
}

Этот макрос нужен только для критических путей. Он предотвращает конверсию char в Unicode строки. Если код вызывается разово, на создание окна - это мелочь. А вот когда в цикле - то да.

А не думали взять какой-нибудь Tauri вместо Qt? Или пойти по пути comma ai и переписать весь gui на raylib?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации