Создайте свой собственный Mastodon UX

автор vadim


Я обсуждал списки пожеланий Mastodon UX с некоторыми новыми знакомыми. Этот отрывок из терминала Bloomberg для Mastodon завершает часть моего собственного списка пожеланий.

На временной шкале мастодонтов болтливый человек может доминировать над тем, что вы видите с первого взгляда. Когда мы участвуем в социальных сетях, мы всегда делаем ставки на внимание друг друга. Как издатели каналов, разумно учитывать, как шквал элементов может ошеломить читательский опыт. Но также полезно подумать о том, как читатели канала могут фильтровать источник болтливости. База SQL Steampipe предоставляет простой и естественный способ сделать это. Вот часть запроса, который управляет представлением списка.

select distinct on (list, person, hour) -- only one per list/user/hour
  person,
  url,
  hour,
  toot
from
  data
order by
  hour desc, list, person

Было легко внедрить правило, которое ограничивает каждого человека максимум одним гудоком в час. Следующими шагами здесь будет применение этого правила к другим представлениям, отображение количества свернутых инструментов и включение таких правил для каждого человека.

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

Вот исходные версии двух файлов, которые я изменил, чтобы добавить новую функцию. Сначала есть home.sp который определяет панель управления для домашней временной шкалы.

dashboard "Home" {
  
  tags = {
    service = "Mastodon"
  }

  container {
    // a text widget with the HTML links that define the menu of dashboards
  }

  container {
    text {
    // a block that displays the HTML links that form a menu of dashboards
    }

    card {
    // a block that reports the name of my server
    }

    input "limit" {
      width = 2
      title = "limit"
      sql = <<EOQ
        with limits(label) as (
          values 
            ( '50' ),
            ( '100' ),
            ( '200' ),
            ( '500' )
        )
        select
          label,
          label::int as value
        from 
          limits
      EOQ
    }    
  }


  container { 

    table {
      title = "home: recent toots"
      query = query.timeline
      args = [ "home", self.input.limit ]
      column "person" {
        wrap = "all"
      }
      column "toot" {
        wrap = "all"
      }
      column "url" {
        wrap = "all"
      }
    }
  }

}

И вот новая версия. Он добавляет блок ввода с именем boostsи передает его значение указанному запросу.

dashboard "Home" {
  
  tags = {
    service = "Mastodon"
  }

  container {
    // a text widget with the HTML links that define the menu of dashboards
  }

  container {
    text {
    // a block that displays the HTML links that form a menu of dashboards
    }

    card {
    // a block that reports the name of my server
    }

    input "limit" {
    // as above
    }

    input "boosts" {
      width = 2
      title = "boosts"
      sql = <<EOQ
        with boosts(label, value) as (
          values
            ( 'include', 'include' ),
            ( 'hide', ' ' ),
            ( 'only', ' 🢁 ' )
        )
        select
          label,
          value
        from
          boosts
      EOQ
    }

  }

  container { 

    table {
      // as above
      args = [ "home", self.input.limit, self.input.boosts ]
    }
  }

}

Информационные панели Steampipe построены на двух языках. HCL (язык конфигурации HashiCorp) определяет виджеты UX, а SQL заполняет их данными. В этом случае мы выбираем статические значения для boosts вход. Но там может выполняться любой запрос Steampipe! Например, вот блок ввода, который я использую на панели инструментов, который фильтрует временную шкалу по списку, в который я назначил людей.

input "list" {
  type = "select"
  width = 2
  title = "search home timeline"
  sql = <<EOQ
    select
      title as label,
      title as value
    from
      mastodon_list
    order by
      title
  EOQ
}

Теперь вот ссылочный запрос, query.timelineиз файла query.sp который содержит запросы, используемые всеми инструментальными панелями.

query "timeline" {
  sql = <<EOQ
    with toots as (
      select
        account_url as account,
        case 
          when display_name="" then user_name 
          else display_name
        end as person,
        case
          when reblog -> 'url' is null then
            content
          else
            reblog_content
        end as toot,
        to_char(created_at, 'MM-DD HH24:MI') as created_at,
        case
          when reblog -> 'url' is not null then '🢁'
          else ''
        end as boosted,
        case
          when in_reply_to_account_id is not null then ' 🢂 ' || ( select acct from mastodon_account where id = in_reply_to_account_id )
          else ''
        end as in_reply_to,
        case
          when reblog -> 'url' is not null then reblog ->> 'url'
          else url
        end as url
      from
        mastodon_toot
      where
        timeline = $1
      limit $2
    )
    select
      account,
      person || 
        case 
          when in_reply_to is null then ''
          else in_reply_to
        end as person,
      boosted || ' ' || toot as toot,
      url
    from
      toots
    order by
      created_at desc
  EOQ
  param "timeline" {}
  param "limit" {}
}

А вот и новая версия этого запроса.

query "timeline" {
  sql = <<EOQ
    with toots as (
    // as above      
    ),
    boosted as (
      select
        $3 as boost,
        boosted,
        account,
        in_reply_to,
        person,
        toot,
        url
      from
        toots
      order by
        created_at desc
    )
    select
      account,
      person ||
        case
          when in_reply_to is null then ''
          else in_reply_to
        end as person,
      boosted || ' ' || toot as toot,
      url
    from
      boosted
    where
      boost = boosted
      or boost="include"
      or boost="n/a"
  EOQ
  param "timeline" {}
  param "limit" {}
  param "boost" {}
}

В исходной версии используется одно CTE (обычное табличное выражение, также известное как WITH пункт), tootsчтобы упорядочить данные для заключения SELECT. Новая версия вставляет еще один CTE, повышает, в трубопровод. Оно использует $3 ссылаться param "boost" {} который сопоставляется с self.input.boosts перешел от home.sp

Код SQL стандартный. Postgres — это движок внутри Steampipe, и я иногда использую специфичные для Postgres идиомы, но я не думаю, что здесь происходит что-то подобное.

Код HCL может быть незнакомым. Steampipe использует HCL, потому что его основная аудитория — профессионалы DevSecOps, знакомые с Terraform, основанным на HCL. Но это довольно простой язык, который можно использовать для описания всех видов ресурсов. Здесь ресурсы — это виджеты, которые появляются на информационных панелях.

Еще одна вещь, которую нужно знать, если вы хотите засучить рукава и попробовать создать свои собственные информационные панели, заключается в том, что опыт разработчиков — опять же, по моему предвзятому мнению! — довольно хорош, потому что, если вы используете автосохраняющийся редактор, вы увидите ваши изменения (как в коде HCL, так и в коде SQL) отражаются в режиме реального времени.

Чтобы проиллюстрировать это, вот скринкаст, который мы включили в наш пост в блоге, представляющий систему панели инструментов.

Здесь не показана, потому что мы хотели сосредоточиться на счастливом пути, обратная связь в реальном времени, когда ваши SQL-запросы провоцируют ошибки Postgres. Опыт очень похож на тот, который Брет Виктор отстаивает в «Изобретая на основе принципа». Основной принцип: «Создатели нуждаются в непосредственной связи с тем, что они создают».

Вот неправильный путь, который слишком часто ограничивает нас.

Если со сценой что-то не так, или если я иду и вношу изменения, или если у меня есть дополнительные идеи, я должен вернуться к коду, и я редактирую код, компилирую и запускаю, смотрю, как он выглядит. Что-то не так, я возвращаюсь к коду. Большую часть времени я работаю в коде, работая в текстовом редакторе вслепую, без непосредственной связи с этим делом, что я собственно и пытаюсь сделать.

И вот правильный путь.

У меня есть эта картинка сбоку и код сбоку, и эта часть рисует небо, эта рисует горы, а эта рисует дерево, и когда я вношу какие-либо изменения в код, картинка сразу меняется. Таким образом, код и изображение всегда синхронизированы; нет компиляции и запуска. Я просто меняю что-то в коде и вижу, как что-то меняется на картинке.

изобретать по принципу Брет Виктор

Мы хотим работать правильно везде, где это возможно. Этот опыт пока доступен не везде, но он доступен в Steampipe, где он дает возможность экспериментировать и создавать прототипы, на которые многие из нас вдохновились, погружаясь в Mastodon.

Если вы хотите попробовать это сами, ознакомьтесь с инструкциями по установке плагина, который сопоставляет API Mastodon с таблицами Postgres, а также инструментальными панелями, которые используют эти таблицы, и отправьте мне запрос (на Mastodon, если хотите!) с любыми вопросами, которые вы можете задать. иметь.

Эта серия:

  1. Автономность, размер пакета, трение, разветвление и скорость
  2. Mastodon, Steampipe и RSS
  3. Просмотр федиверса
  4. Терминал Bloomberg для Mastodon
  5. Создайте свой собственный Mastodon UX
  6. Списки и люди на Mastodon
  7. Сколько людей в моей ленте Mastodon также написали сегодня в Твиттере?
  8. URL-адреса Mastodon с указанием экземпляра
  9. Графики взаимоотношений мастодонтов
  10. Работа со списками мастодонтов
  11. Изображения считаются вредными (иногда)
  12. Картирование более широкой федеральной сети
  13. Протоколы, API и соглашения
  14. Новости в федерации
  15. Сопоставление людей и тегов в Mastodon
  16. Визуализация модерации сервера Mastodon
  17. Сроки Mastodon для команд
  18. Плагин Mastodon теперь доступен на Steampipe Hub.

Далее прочитайте это:

  • Лучшее программное обеспечение с открытым исходным кодом 2022 года
  • Разработчики не хотят заниматься операциями
  • 7 причин, почему Java по-прежнему великолепна
  • Почему Wasm — это будущее облачных вычислений
  • Почему оценки программной инженерии — это мусор
  • Объяснение непрерывной интеграции и непрерывной доставки

Related Posts

Оставить комментарий