داشبورد + فید خوان ساخته شده با SQL راهی آسان و طبیعی را در اختیار شما میگذارد تا فعالیتهای Mastodon را به میزان دلخواه یا کمتر مصرف کنید.
من در مورد لیست آرزوهای Mastodon UX با تعدادی از آشنایان جدید آنجا بحث کرده ام. این گزیده از یک پایانه بلومبرگ برای Mastodon با بخشی از فهرست آرزوهای خودم به پایان می رسد.
در جدول زمانی 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 ( '۵۰' ), ( '۱۰۰' ), ( '۲۰۰' ), ( '۵۰۰' ) ) 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 $۳ 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 دیگری به نام boosts را وارد خط لوله می کند. از $۳
برای ارجاع به param "boost" {}
استفاده میکند که به self.input.boosts
ارسال شده از home.sp< نگاشت میشود. /code>
کد SQL همه استاندارد است. Postgres موتور داخل Steampipe است، و من گاهی اوقات از اصطلاحات خاص Postgres استفاده می کنم، اما فکر نمی کنم هیچ یک از آنها در اینجا اتفاق بیفتد.
کد HCL ممکن است ناآشنا باشد. Steampipe از HCL استفاده می کند زیرا مخاطبان اصلی آن متخصصان DevSecOps هستند که با Terraform که مبتنی بر HCL است آشنا هستند. اما این یک زبان بسیار ساده است که می تواند برای توصیف انواع منابع استفاده شود. در اینجا منابع ویجت هایی هستند که در داشبوردها ظاهر می شوند.
نکته دیگری که باید بدانید، اگر میخواهید آستینهای خود را بالا بزنید و سعی کنید داشبوردهای خود را بسازید، این است که تجربه توسعهدهنده - باز هم به نظر مغرضانه من - بسیار عالی است زیرا اگر از ویرایشگر ذخیره خودکار استفاده میکنید، تغییرات شما (در کد HCL و SQL) در زمان واقعی منعکس شده است.
برای نشان دادن آن، در اینجا اسکرینکستی است که در پست وبلاگ خود برای معرفی داشبورد قرار داده ایم. سیستم.
در آنجا نشان داده نمیشود، زیرا میخواهیم روی مسیر شاد تمرکز کنیم، بازخورد بلادرنگی است که درخواستهای SQL شما باعث ایجاد خطاهای Postgres میشوند. این تجربه بسیار شبیه تجربه قهرمان برت ویکتور در اختراع بر روی اصل است. اصل اصلی: "سازندگان نیاز به ارتباط فوری با آنچه که خلق می کنند دارند."
این روش اشتباهی است که اغلب ما را محدود میکند.
اگر صحنه مشکلی داشته باشد، یا اگر بروم و تغییراتی ایجاد کنم، یا اگر ایده های بیشتری دارم، باید به کد بازگردم، و کد را ویرایش، کامپایل و اجرا می کنم، ببینم چه شکلی است. . هر مشکلی هست به کد باز می گردم. بیشتر وقت من صرف کار روی کد میشود، کورکورانه در یک ویرایشگر متن کار میکنم، بدون اینکه ارتباط فوری با این چیز داشته باشم، چیزی که در واقع تلاش میکنم ایجاد کنم.
و راه درست اینجاست.
من این عکس را در کنار دارم، و کد را در کنار، و این قسمت آسمان را میکشد و کوهها را میکشد و درخت را میکشد، و وقتی هر تغییری در کد ایجاد میکنم، تصویر تغییر میکند. بلافاصله. مستقیما. بنابراین کد و تصویر همیشه هماهنگ هستند. کامپایل و اجرا وجود ندارد. من فقط چیزهایی را در کد تغییر می دهم و می بینم که چیزها در تصویر تغییر می کنند.
ما میخواهیم هر جا که میتوانیم به روش درست کار کنیم. این تجربه هنوز در همه جا در دسترس نیست، اما در Steampipe در دسترس است، جایی که به شدت آزمایش و نمونهسازی را که بسیاری از ما الهام گرفتهایم در حین بررسی در Mastodon انجام میدهیم، امکانپذیر میسازد.
اگر میخواهید خودتان این را امتحان کنید، لطفاً دستورالعملهای راهاندازی افزونه را بررسی کنید. a> که APIهای Mastodon را به جداول Postgres و داشبوردهای که از آن جداول استفاده میکنند، نگاشت میکند. و در صورت تمایل به من پینگ کنید (در Mastodon اگر دوست دارید!) هر سوالی ممکن است داشته باشید.
این مجموعه:
- خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
- Mastodon، Steampipe و RSS
- مرور fediverse
- یک پایانه بلومبرگ برای Mastodon
- Mastodon UX خود را ایجاد کنید
- لیست ها و افراد موجود در Mastodon
- چند نفر در فید Mastodon من نیز امروز توییت کردند؟
- نشانیهای اینترنتی Mastodon واجد شرایط نمونه
- نمودارهای رابطه ماستودون
- کار با لیست های Mastodon
- تصاویری که مضر در نظر گرفته می شوند (گاهی اوقات)
- نقشه برداری فدیورس وسیع تر
- پروتکلها، APIها و قراردادها
- اخبار در fediverse
- نقشه برداری از افراد و برچسب ها در Mastodon
- تجسم نظارت سرور Mastodon
- جدول زمانی Mastodon برای تیم ها
- افزونه Mastodon اکنون در Steampipe Hub در دسترس است
پست های مرتبط
Mastodon UX خود را ایجاد کنید
Mastodon UX خود را ایجاد کنید
Mastodon UX خود را ایجاد کنید