ATProto Browser

ATProto Browser

Experimental browser for the Atmosphere

Record data

{
  "uri": "at://did:plc:fzkpgpjj7nki7r5rhtmgzrez/com.whtwnd.blog.entry/3kutsaa6rbk2p",
  "cid": "bafyreih25ivgebphbepezjemu5brdvabwnekoz3phf6e7nrxjda4zbp4zq",
  "value": {
    "ogp": {
      "url": "https://blewit.us-west.host.bsky.network/xrpc/com.atproto.sync.getBlob?did=did%3Aplc%3Afzkpgpjj7nki7r5rhtmgzrez&cid=bafkreiae7gwb7n5nnbqca3tc3zeac6m3mvtyw2hlkq2dbwvap7npg3gdzi",
      "width": null,
      "height": null
    },
    "$type": "com.whtwnd.blog.entry",
    "blobs": [
      {
        "name": "logo.png",
        "blobref": {
          "ref": {
            "code": 85,
            "version": 1,
            "hash": {
              "0": 18,
              "1": 32,
              "2": 148,
              "3": 88,
              "4": 0,
              "5": 3,
              "6": 89,
              "7": 146,
              "8": 18,
              "9": 166,
              "10": 228,
              "11": 45,
              "12": 89,
              "13": 20,
              "14": 158,
              "15": 43,
              "16": 157,
              "17": 165,
              "18": 40,
              "19": 28,
              "20": 124,
              "21": 220,
              "22": 37,
              "23": 169,
              "24": 9,
              "25": 189,
              "26": 66,
              "27": 197,
              "28": 16,
              "29": 1,
              "30": 150,
              "31": 185,
              "32": 203,
              "33": 194
            }
          },
          "size": 44401,
          "mimeType": "image/png",
          "original": {
            "$type": "blob",
            "ref": {
              "$link": "bafkreieulaaagwmscktoilkzcspcxhnffaohzxbfvee32qwfcaaznoolyi"
            },
            "mimeType": "image/png",
            "size": 44401
          }
        },
        "encoding": "image/png"
      },
      {
        "name": "logo.jpg",
        "blobref": {
          "ref": {
            "code": 85,
            "version": 1,
            "hash": {
              "0": 18,
              "1": 32,
              "2": 4,
              "3": 249,
              "4": 172,
              "5": 31,
              "6": 183,
              "7": 173,
              "8": 104,
              "9": 96,
              "10": 32,
              "11": 110,
              "12": 98,
              "13": 222,
              "14": 72,
              "15": 1,
              "16": 121,
              "17": 155,
              "18": 101,
              "19": 103,
              "20": 139,
              "21": 104,
              "22": 235,
              "23": 84,
              "24": 52,
              "25": 48,
              "26": 218,
              "27": 160,
              "28": 127,
              "29": 218,
              "30": 243,
              "31": 108,
              "32": 195,
              "33": 202
            }
          },
          "size": 31128,
          "mimeType": "image/jpeg",
          "original": {
            "$type": "blob",
            "ref": {
              "$link": "bafkreiae7gwb7n5nnbqca3tc3zeac6m3mvtyw2hlkq2dbwvap7npg3gdzi"
            },
            "mimeType": "image/jpeg",
            "size": 31128
          }
        },
        "encoding": "image/jpeg"
      }
    ],
    "theme": "github-light",
    "title": "WhiteWindをオープンソース化します!!!",
    "content": "![](https://blewit.us-west.host.bsky.network/xrpc/com.atproto.sync.getBlob?did=did%3Aplc%3Afzkpgpjj7nki7r5rhtmgzrez&cid=bafkreiae7gwb7n5nnbqca3tc3zeac6m3mvtyw2hlkq2dbwvap7npg3gdzi)\n\nWhiteWindをオープンソース化します!\n\n- [whtwnd/whitewind-blog: Repository to manage WhiteWind atproto blogging platform codes](https://github.com/whtwnd/whitewind-blog)\n\n## オープンソース化の経緯\n### atprotoサービス増加の重要性\n 近年プラットフォーム事業者によってユーザーの権利や自由が制限される事例(enshittification)が注目を集めています。  \n理由が明確に示されないアカウント停止[^1]、シャドウバン[^3]、収益化などのルール変更[^2]、個人情報の売買[^4]、ユーザーが見たくない興味のない人の投稿などのコンテンツの挿入[^5]、Botの跋扈の放置[^6]、スパムを推奨するかのような仕組み[^7]など枚挙に暇がありません。  \nこれらenshittificationを技術的に解決する試みとして、分散型ソーシャルメディアが注目を集めています。  \n\n atprotoはBluesky社によって開発されている比較的新しいソーシャルメディアのためのプロトコル(通信のためのIT技術)であり、分散型に近しい設計を取っています。  \natprotoを使ったサービスが上記のようにユーザーの権利や自由を制限しようと試みた場合、ユーザーは同等機能を持ったより良い運営方針の別サービスを作ったり簡単に移行[^8]できるというカウンターが可能です。  \nそのため、サービス提供者は、自身のサービスをatprotoを用いて実装すればユーザー離反のリスクをあえて負うことになるので、enshittificationする意志の無さや運営方針に関する自信等を示す事ができ、ユーザー側も安心してそのサービスを使うことができます。  \natprotoを採用したサービスが増えることでプラットフォーム事業者によるenshittificationの問題が解決されることが期待されます。\n\n Bluesky社はatprotoのリファレンス実装として、マイクロブログのためのソーシャルメディアBluesky(以下社名と区別するためbskyと呼称)を運営しています。  \n2023年4月の限定公開以降、enshittificationを防止するためのatprotoを開発している信頼感やX / Twitterのenshittificationからの避難所としてbskyは着実にユーザー数を増やしてきました。  \nしかしながら、bskyがatprotoの高い実用性を示しているにも関わらず、これまでatprotoを採用しているサービスはbskyに限られていました。  \natprotoを使ったサービスがbskyに限定される場合、社会全体でenshittificationを防止するという理想像からはかけ離れた姿になります。  \n\n### なぜWhiteWindローンチしたのか\n WhiteWindはatprotoを使った初めてのサードパーティー非bskyサービスであり、手軽にMarkdownのリッチテキストを投稿できるブログサービスです。  \nWhiteWindは\n- atprotoをbsky以外のサービスに実装したとき、ユーザー・サービス双方にとってどのような嬉しさがあるのか\n- atprotoのSDKはどの程度実用的なのか\n- atprotoを使ったサービスがbsky以外に出現しないのはなぜか\n- atprotoはenshittificationに対する保険以外の機能を持ちうるか、既存サービスでは実現し得ないUXが存在するか\n- atprotoは暗黙的に技術に対する仮定を置いているか\n- atprotoを使ったサービスを運営する上でどのような障害に遭遇するか\n\nという疑問に答えることを目的として作られました。  \nまた、WhiteWindをローンチすることで\n1. atprotoを使った非bsky atprotoサービスがサードパーティー開発者でも作れることが実証され先例ができる\n2. 他の潜在的なatproto開発者のモチベーションもしくは対抗心を刺激し、atprotoサービスを増える\n3. 究極的にはatprotoのエコシステムに貢献できる\n\nであろうという予測を持っていました。\n\n 2024年3月のローンチ以降サービス改修を重ね、一定の安定稼働が実現されました。  \n3ヶ月のサービス運用を通じ、上記疑問に対する回答は得られつつあります。  \nしかしながら、他の潜在的なatprotoサービスが増えるという予測の実現には未だ至っていません。  \n\n### 最近のatproto開発者界隈の活発化を更に加速したい\n 最近atprotoを用いた非bskyサードパーティーサービスの動きが活発化してきています[^9][^10][^11][^12][^13]。  \nWhiteWindのサービス開発が一定の軌道に乗り、一定機能が揃いローンチ当初ほどの大規模な変更が必要なくなったことも鑑みると、この時点を1.0.0としてWhiteWindソースを公開し、atproto開発者コミュニティに貢献する絶好の機会と考えられます。  \n仮説検証速度とUXに貢献する部分の開発を優先し、最適化を後回しにしてきたため、他人に見せられるとは到底言い難い恥ずかしいコードになっていますが、WhiteWindのソースコードを公開することを決意しました。\n\n## リポジトリ構造\n- .devcontainer\n  - 開発用devcontainerです。golangのベースイメージを用い、TypeScript開発に必要なfeatureを入れています。\n- backend\n  - WhiteWindのXRPC APIを実装したgolangのコードが置いてあります。\n- cmd/relaysink\n  - WhiteWindのリレーコンシューマーを置いています。\n- frontend\n  - Next.jsで実装されたWhiteWindのフロントエンドTypeScriptコードです。\n- lexicons\n  - LexiconのJSONが置いてあります。\n\n## コントリビューション\nコントリビューションのためのガイドやアーキテクチャの解説などは開発余力の関係から暫くの間整備できません。  \nPRやフィードバックなどは歓迎します。\n\n## atproto開発者へ\n一緒にatprotoのエコシステムに貢献していくことを楽しみにしています!\n\n[^1]: [Has anyone been suspended from Twitter/X? I was for 'violating our rules against platform manipulation and spam.' I appealed. What is this violation? - Quora](https://www.quora.com/Has-anyone-been-suspended-from-Twitter-X-I-was-for-violating-our-rules-against-platform-manipulation-and-spam-I-appealed-What-is-this-violation)\n[^2]: [Changes to YouTube Partner Program terms - YouTube Help](https://support.google.com/youtube/answer/12843009?hl=en)\n[^3]: [Shadow banning - Wikipedia](https://en.wikipedia.org/wiki/Shadow_banning)\n[^4]: [Facebook–Cambridge Analytica data scandal - Wikipedia](https://en.wikipedia.org/wiki/Facebook%E2%80%93Cambridge_Analytica_data_scandal)\n[^5]: [Why Your Twitter Feed Is Full of People You Don’t Follow | TIME](https://time.com/6251833/twitter-for-you-page-tiktok/)\n[^6]: [X’s Bot Purge Sees Big Accounts Lose Thousands of Followers | Social Media Today](https://www.socialmediatoday.com/news/x-formerly-twitter-bot-purge-sees-big-accounts-lose-followers/712495/)\n[^7]: [Is it worth getting Twitter Blue & Monetization?](https://www.reddit.com/r/Twitter/comments/158js36/is_it_worth_getting_twitter_blue_monetization/)\n[^8]: あるサービスAから投稿(メンションやリポスト含む)、フォロー・フォロワー関係などを別のサービスBに手間なく短時間で完全移行でき、しかもフォロワーがサービスAを使い続けたとしても、Bを使っている自分とのやり取りに支障を来さないという意味で\n[^9]: https://bsky.app/profile/futanari.tentacle.expert/post/3kujluafvmk2g\n[^10]: https://bsky.app/profile/why.bsky.team/post/3kuonku75ay2i\n[^11]: https://bsky.app/profile/boobam.bsky.social/post/3kum4xpxzyk2o\n[^12]: https://bsky.app/profile/unhappysalt.life/post/3kuj45qfad72m\n[^13]: https://bsky.app/profile/soleia.app/post/3kt6fgfe7tc22",
    "createdAt": "2024-06-13T23:59:34.976Z",
    "visibility": "public"
  }
}