۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

لیست های ماستودون مهاجرت

اگر از یک سرور Mastodon به سرور دیگری منتقل می‌شوید و می‌خواهید افراد موجود در لیست‌های خود را مهاجرت کنید، گزینه‌های کمی دارید. در اینجا راهی برای انجام آن با Steampipe و SQL وجود دارد.

اگر از یک سرور Mastodon به سرور دیگری منتقل می‌شوید و می‌خواهید افراد موجود در لیست‌های خود را مهاجرت کنید، گزینه‌های کمی دارید. در اینجا راهی برای انجام آن با Steampipe و SQL وجود دارد.

حساب اصلی Mastodon من در mastodon.social بود. من آن را انتخاب کردم زیرا بزرگترین نمونه است، توسط توسعه دهندگان سرویس اداره می شود، و پیاده سازی مرجع نرم افزار را اجرا می کند. من می‌خواستم در ابتدا مانند اکثر مردم، فدیورس را تجربه کنم، سپس در نظر بگیرم که آیا به سرور دیگری مهاجرت کنم یا نه، و اگر چنین است، کدام یک.

هفته گذشته به social.coop مهاجرت کردم که مانند cosocial.ca، چیزی است که داریوش کاظمی آن را سایت رسانه اجتماعی مستقل متعلق به جامعه. فکر نمی‌کنم مخفف COISMS به کار رود، اما مدل کسب‌وکار همان چیزی است که من به دنبال آن بودم. من نمی خواهم از خدمات “رایگان” استفاده کنم که من را به محصولی که می فروشند تبدیل می کند. من می‌خواهم برای سرویسی بپردازم که با دلارهای من تأمین می‌شود، نه با داده‌های من. به همین دلیل است که سال‌ها پیش به نفع Fastmail به جی‌میل کمک کردم، و به همین دلیل خوشحالم که ماهانه ۱۰ دلار خرج می‌کنم – قیمت چند کاپوچینو – برای حمایت از افرادی که چراغ‌ها را در social.coop روشن نگه می‌دارند. مدنیت.

دستورالعمل‌های برای مهاجرت از یک سرور دو مسیر ارائه می‌دهد: تغییر مسیر نمایه< /code> و حرکت نمایه. من اولی را انتخاب کردم، زیرا تصور می‌کردم پس از مهاجرت، دسترسی API به mastodon.social را حفظ می‌کنم، و بنابراین می‌توانم از Steampipe برای پرس و جوی هر دو حساب استفاده کنم. چرا این کار را انجام دهید؟ شما نمی‌توانید پست‌های خود را از سرور قدیمی به سرور جدید منتقل کنید، فقط دنبال‌کنندگان و (به صورت اختیاری) دنبال‌کنندگان، نشانک‌ها، بلاک‌ها و بی‌صدا کردن‌هایتان هستند. Steampipe می‌تواند همزمان به دو سرور مختلف Mastodon متصل شود، بنابراین فکر کردم که می‌توانم درخواست‌هایی را علیه هر دو اجرا کنم.

درس های آموخته شده

معلوم شد که این یک فرض اشتباه است. من می‌توانم با خاموش کردن تغییر مسیر، حساب mastodon.social خود را دوباره فعال کنم، اما در مورد پیامدهای انجام این کار مبهم هستم. در همین حال هنوز امکان صادر کردن پست‌های من وجود دارد، بنابراین در صورت نیاز همیشه می‌توانم آنها را دوباره از این طریق دریافت کنم.

این هم یک فرض اشتباه دیگر. من فکر می کنم که اگر من تصمیم می گرفتم حساب خود را منتقل کنم، به جای تغییر مسیر، نمایه من به سرور جدید منتقل می شد. در عوض این بر عهده من بود که نمایه جدید را پر کنم. من @judell@social.coop را ایجاد کرده بودم، اما وقتی مهاجرت را شروع کردم، هنوز نمایه را تکمیل نکرده بودم. بنابراین وقتی به فالوورها اطلاع داده شد که judell@social.coop اکنون آنها را دنبال می کند، هیچ تصویر یا بیوگرافی یا وب سایت تأیید شده ای وجود نداشت. این باعث شد برخی افراد فکر کنند که این یک حساب جعلی است و آن را مسدود کنند. این یک فاجعه نبود، و من با چند نفر از آنها برای حل این موضوع صحبت کرده‌ام، اما این یک خطای اجباری بود که اجتناب از آن آسان بود.

نمای اینجا

در اینجا یک مقایسه فعالیت هفتگی در دو سرور، از طریق داشبورد سرور.

فعالیت هفتگی ماستودون اجتماعی در مقابل تعاونی اجتماعی

حرکت به سروری با تنها ۱٪ جریانی که در mastodon.social اتفاق می‌افتد چگونه است؟ زیاد متفاوت نیست! از آنجایی که من فالوورها و دنبال‌کنندگانم را جابه‌جا کرده‌ام، و از آنجا که عمدتاً با خط زمانی خانه و فهرست‌ها تعامل دارم، تجربه بیشتر یکسان است. برای مثال، نمودار تقویت روابط در اینجا آمده است. در میان سرورهای موجود در جدول زمانی خانه من. به نظر می رسد درست مانند قبل.

محله های سرور از تعاونی اجتماعی

داشتن یک نمودار اجتماعی قابل حمل که می توانید در حین حرکت در فدیورس همراه داشته باشید فوق العاده است. تفاوت های اصلی این است که من با افراد جدید ملاقات می کنم و زمان بیشتری را در جدول زمانی محلی صرف می کنم. در سرور بزرگی مانند mastodon.social، خط زمانی محلی مانند آتش‌هوس توییتر به نظر می‌رسد، برای کسانی که به یاد می‌آورند چه زمانی هنوز چیزی بود که می‌توانستید تماشا کنید. من گهگاه به آن نگاه می‌کردم، زیرا می‌توانست منبع شادی مفیدی باشد، اما عمدتاً خیلی تصادفی بود. جدول زمانی محلی در social.coop هنوز هم تا حدودی تصادفی است، اما به نظر من مفیدتر است - نه تنها به این دلیل که جمعیت بسیار کمتری را نشان می‌دهد، بلکه به این دلیل که افرادی که ثبت‌نام کرده‌اند علایق مشترکی دارند. مدل قفسه.

من لیست های خود را می خواهم

اما یک مانع بزرگ وجود داشت. می‌توانید لیست‌ها را از سرور قدیمی صادر کرده و آنها را به سرور جدید وارد کنید، اما برای حساب‌هایی که به آن فهرست‌ها اختصاص داده‌اید، صادرات/وارداتی وجود ندارد. از آنجایی که من به شدت به فهرست ها برای پیمایش جریان Mastodon به روشی متمرکز و عمدی متکی هستم، این مشکلی بود که واقعاً باید برطرف می کردم. من masto-list-importer الیوت نش را امتحان کردم، اما وقتی سعی کردم ۴۶۰ نفر خود را انتقال دهم/ نگاشت لیست من به محدودیت های نرخ API رسیدم. بنابراین به جای آن، یک راه حل مبتنی بر Steampipe کار کردم که جایگزین مفیدی است، و همچنین راه خوبی برای نشان دادن مراحل مربوطه است.

فرض کنیم که می‌خواهم دوباره از social.coop به fosstodon.org مهاجرت کنم. من نام لیست های خود را از social.coop صادر کرده و آنها را به fosstodon.org وارد کرده ام. اکنون باید آن لیست ها را پر کنم. راه حل SQL که من به آن دست یافتم بر اساس مراحل انجام می شود، هر کدام یک عبارت جدول مشترک (CTE) است که بخشی از یک تبدیل پیچیده را انجام می دهد، سپس نتایج را به مرحله بعدی منتقل می کند.

مرحله ۱: حساب های اختصاص داده شده به هر فهرست social.coop را جمع آوری کنید.

ما با پیوستن به دو جدول شروع می کنیم تا حساب های اختصاص داده شده به هر لیست را برشماریم.

  with accounts_by_list as (
  select 
    a.acct as old_account,
    a.id as old_account_id,
    l.id as old_list_id,
    l.title as title
  from
    social_coop.mastodon_my_list l
  join
     social_coop.mastodon_list_account a
  on
    l.id = a.list_id
)
select * from accounts_by_list

خروجی در accounts_by_list، در واقع یک جدول موقتی است که می توانید آن را مرور کنید تا مطمئن شوید نتایج مطابق انتظار است. توانایی تأیید خروجی هر فاز از یک خط لوله CTE، قبل از ارسال آن به فاز بعدی، مزیت کلیدی این رویکرد است. اشکال زدایی سوالات فرعی تو در تو بسیار سخت تر است!

مرحله ۲: حساب‌ها را در social.coop به حساب‌های fosstodon.org

نگاشت کنید

دو تبدیل در این مرحله اتفاق می‌افتد. اگر یک حساب یک نام کاربری ساده است، بگویید personA، سپس یک حساب social.coop است. در fosstodon.org همان حساب به صورت personA@social.coop نشان داده خواهد شد. برعکس، اگر personB@fosstodon.org در social.coop وجود داشته باشد، آن حساب به نام کاربری ساده personB در آنجا تبدیل می‌شود. همه حساب‌های دیگر (مانند personC@hachyderm.io) بدون تغییر عبور می‌کنند.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  select
    old_account,
    old_account_id,
    old_list_id,
    title,
    case 
      when old_account !~ '@' then old_account || '@social.coop' 
      when old_account ~ '@fosstodon.org' then replace(old_account, '@fosstodon.org', '')
      else old_account
    end as new_account
  from
     accounts_by_list
)
select * from adjusted_accounts_by_list

مرحله ۳: عناوین لیست را به سرور جدید نگاشت کنید.

نام لیست ها در هر دو مکان یکسان است، اما شناسه آنها متفاوت است. برای مثال، فهرست Fediverse من ۱۰۴۳ در social.coop و ۶۷۷۱ در fosstodon.org< است. /code>. برای فراخوانی فراخوانی API که فردی را به فهرست اضافه می کند، نیاز داریم برای استفاده از شناسه دوم.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  select
    a.*,
    l.id as new_list_id
  from
    adjusted_accounts_by_list a
  join
    fosstodon.mastodon_my_list l
  on
    a.title = l.title
)
select * from adjusted_list_ids

مرحله ۴: شناسه های حساب را به سرور جدید نگاشت کنید.

همانند لیست‌ها، حساب‌های موجود در سرور جدید نیز دارای شناسه‌های متفاوتی هستند و این شناسه‌ها نیز برای تماس API مورد نیاز هستند. می‌توانیم شناسه‌های جدید را با پیوستن به ستون new_account از مرحله اول با جدول fosstodon.mastodon_my_following پیدا کنیم.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  -- as above
,
),
adjusted_account_ids as (
  select 
    a.*,
    f.id as new_account_id
  from
    adjusted_list_ids a
  join
    fosstodon.mastodon_my_following f
  on
    f.acct = a.new_account
)
select * from adjusted_account_ids

مرحله ۵: ایجاد تماس های API

راههای زیادی برای پوست این گربه وجود دارد. از آنجایی که می‌توانید از Steampipe به‌عنوان یک مؤلفه استفاده کنید، می‌توانید از هر زبان برنامه‌نویسی با درایور Postgres استفاده کنید. برای اجرای این کوئری، و Mastodon API را با لیست و شناسه حساب مناسب فراخوانی کنید.

و البته، همیشه curl وجود دارد.

with accounts_by_list as (
  -- as above
),
adjusted_accounts_by_list as (
  -- as above
),
adjusted_list_ids as (
  -- as above
),
adjusted_account_ids as (
  -- as above
)
select
  'curl -X POST -H "Authorization: Bearer ***" https://fosstodon.org/api/v1/lists/' ||
  new_list_id ||
  '/accounts/?' ||
  'account_ids[]=' ||
  new_account_id ||
  '; sleep 1;' as command

برای جلوگیری از فشار، sleep 1 را به هر خط اضافه کردم. من درخواست را در migrate-lists.sql ذخیره کردم و خروجی را به یک فایل صادر کردم.

steampipe query --output csv migrate-lists.sql > migrate.sh

نزدیک بود، اما کاملاً درست نبود. خروجی به این شکل بود:

command
"curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=279462; sleep 1;"
"curl -X POST -H ""Authorization: Bearer ***"" https://fosstodon.org/api/v1/lists/6771/accounts/?account_ids[]=109283421559929728; sleep 1;"

من باید خط سرصفحه را حذف کنم، گیومه های دوتایی را در دو انتهای هر خط حذف کنم، و جفت گیومه های دوتایی را حذف کنم. برای آن به ChatGPT (v4) روی آوردم. چند تلاش طول کشید تا درست شود، اما به زودی یک اسکریپت bash تولید کرد که بسیار خوشحالم که مجبور به نوشتن نشدم.

#!/bin/bash

# read the original script from migrate.sh and store it in an array
readarray -t original_script < migrate.sh

# remove the first line of the original script
modified_script=("${original_script[@]:1}")

# loop through the modified script array and replace double double-quotes with a single double-quote and remove double quotes at the beginning and end of each line
for (( i=0; i<${#modified_script[@]}; i++ )); do
    modified_script[$i]=$(sed 's/""/"/g' <<< "${modified_script[$i]}")
    modified_script[$i]=$(sed 's/^"//' <<< "${modified_script[$i]}")
    modified_script[$i]=$(sed 's/"$//' <<< "${modified_script[$i]}")
done

# print out the modified script with newlines
printf '%s\n' "${modified_script[@]}"

و این کار را انجام داد. با توجه به اینکه فهرست‌های من اکنون به طور کامل در social.coop پر شده است، من اکنون Mastodon را از سرور خانگی جدیدم به همان روشی که در سرور قبلی بودم، لیست محور می‌خوانم.

اگر سرورها را جابه‌جا می‌کنید و می‌خواهید افراد موجود در لیست‌های خود را مهاجرت کنید، حتماً باید masto را امتحان کنید. -list-importer ابتدا، و اگر این روش برای شما کار نمی کند، روش اینجا را به عنوان بازگشتی در نظر بگیرید. من با الیوت نش موافقم که انتقال لیست باید در رابط کاربری Mastodon انجام شود. مردم به درستی شکایت می کنند که پیدا کردن افرادی که می خواهید دنبال کنید و موضوعاتی که می خواهید کشف کنید دشوار است. شما می توانید هشتگ ها را دنبال کنید، اما این می تواند بسیار تصادفی باشد. اختصاص دادن افراد به لیست های موضوعی تعادل خوبی ایجاد می کند. اما فقط در صورتی که آن تکالیف فهرست قابل حمل باشند!

این مجموعه:

  1. خودمختاری، اندازه بسته، اصطکاک، هواکش و سرعت
  2. Mastodon، Steampipe و RSS
  3. مرور fediverse
  4. یک پایانه بلومبرگ برای Mastodon
  5. Mastodon UX خود را ایجاد کنید
  6. لیست ها و افراد موجود در Mastodon
  7. چند نفر در فید Mastodon من نیز امروز توییت کردند؟
  8. نشانی‌های اینترنتی Mastodon واجد شرایط نمونه
  9. نمودارهای رابطه ماستودون
  10. کار با لیست های Mastodon
  11. تصاویری که مضر در نظر گرفته می شوند (گاهی اوقات)
  12. نقشه برداری فدیورس وسیع تر
  13. پروتکل‌ها، APIها و قراردادها
  14. اخبار در fediverse
  15. نقشه برداری از افراد و برچسب ها در Mastodon
  16. تجسم نظارت سرور Mastodon
  17. جدول زمانی Mastodon برای تیم ها
  18. افزونه Mastodon اکنون در Steampipe Hub در دسترس است
  19. مهاجرت کردن لیست های Mastodon
  20. وقتی اردک لاستیکی باز می‌گوید