paint-brush
অ্যাক্টিভিটিপাবের সংক্ষিপ্ত ভূমিকা: সামাজিক নেটওয়ার্কের ভবিষ্যতদ্বারা@thebojda
8,889 পড়া
8,889 পড়া

অ্যাক্টিভিটিপাবের সংক্ষিপ্ত ভূমিকা: সামাজিক নেটওয়ার্কের ভবিষ্যত

দ্বারা Laszlo Fazekas10m2023/10/07
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

ActivityPub হল ওয়ার্ল্ড ওয়াইড ওয়েব দ্বারা প্রমিত একটি উন্মুক্ত, বিতরণ করা সামাজিক নেটওয়ার্ক প্রোটোকল। এর একমাত্র দুর্বলতা হল এটি HTTP প্রোটোকল ব্যবহার করে, যার জন্য একটি কেন্দ্রীয় সার্ভার প্রয়োজন। ActivityPub প্রোটোকল ইতিমধ্যে বিদ্যমান বিকেন্দ্রীভূত প্রোটোকলগুলির জন্য সমর্থন সহ প্রসারিত করা উচিত, যা ফেডিভার্সকে আরও উন্মুক্ত এবং বিকেন্দ্রীকৃত দিকের দিকে বিকাশের অনুমতি দেবে।
featured image - অ্যাক্টিভিটিপাবের সংক্ষিপ্ত ভূমিকা: সামাজিক নেটওয়ার্কের ভবিষ্যত
Laszlo Fazekas HackerNoon profile picture

ActivityPub হল ওয়ার্ল্ড ওয়াইড ওয়েব কনসোর্টিয়াম দ্বারা প্রমিত একটি উন্মুক্ত, বিতরণ করা সামাজিক নেটওয়ার্ক প্রোটোকল। এর প্রথম সংস্করণ 2018 সালে প্রকাশিত হয়েছিল, তাই এটি নতুন নয়। এটি মাস্টোডন সহ বেশ কয়েকটি সামাজিক নেটওয়ার্ক দ্বারা ব্যবহৃত হয়, যেটি সম্প্রতি জনপ্রিয়তা বৃদ্ধি পেয়েছে যখন ইলন মাস্ক টুইটার কিনেছেন এবং এমন পরিবর্তনগুলি করেছেন যা অনেককে খুশি করেনি।


এছাড়াও, Tumblr এবং Facebook-এর বিকল্প টুইটার, থ্রেডসও ইঙ্গিত দিয়েছে যে তারা ভবিষ্যতে প্রোটোকল সমর্থন করবে। একটি নতুন প্রোটোকল না হওয়া সত্ত্বেও, ActivityPub এখন ক্রমবর্ধমান জনপ্রিয় হয়ে উঠছে।


যেহেতু ইউরোপীয় ইউনিয়ন এবং মার্কিন যুক্তরাষ্ট্র বৃহৎ সামাজিক নেটওয়ার্কগুলির বাজারের একচেটিয়া আধিপত্য নিয়ে উদ্বিগ্ন ছিল, আমি কল্পনা করতে পারি যে ভবিষ্যতে, সরকারের চাপে, বিদ্যমান বৃহত্তম সামাজিক নেটওয়ার্ক যেমন ফেসবুক এবং টুইটারও প্রোটোকলকে সমর্থন করবে এবং পরিণত হবে। ফেডিভার্সের অংশ। (The Fediverse হল সামাজিক নেটওয়ার্কের একটি মহাবিশ্ব যাতে ActivityPub-কে সমর্থনকারী প্রদানকারীদের সমন্বয়ে গঠিত।)


আমি বিশ্বাস করি যে ভবিষ্যতে, আমরা টুইটার বা ফেসবুক বেছে নেব না কারণ সেগুলি বন্ধ হয়ে যাবে এবং আমাদের অন্য কোনও বিকল্প থাকবে না।


প্রতিটি প্ল্যাটফর্মের শক্তি আসবে কার কাছে ভাল কৃত্রিম বুদ্ধিমত্তা আছে আগত বিপুল পরিমাণ ডেটা ফিল্টার করার জন্য, ব্যবহারকারীদের জন্য সবচেয়ে গুরুত্বপূর্ণ তথ্যগুলিকে যাচাই করতে, নির্বাচন করতে এবং সংক্ষিপ্ত করতে।


অবশ্যই, এটি করার জন্য, একজনকে অবশ্যই ব্যবহারকারীকে খুব ভালভাবে জানতে হবে, যা ব্যবহারকারীর স্বার্থেও। বিনিময়ে, কৃত্রিম বুদ্ধিমত্তা অনেক বেশি প্রাসঙ্গিক বিজ্ঞাপন প্রদান করতে পারে।


একটি উন্মুক্ত, অ্যাক্সেসযোগ্য সিস্টেমে, প্রতিযোগিতাটি আর সামাজিক নেটওয়ার্কগুলির মধ্যে নয়, তবে কৃত্রিম বুদ্ধিমত্তা-ভিত্তিক অ্যালগরিদমের মধ্যে হবে৷


চলুন দেখি ActivityPub কিভাবে কাজ করে। মৌলিক কার্যকারিতা এই খুব সহজ ডায়াগ্রাম দ্বারা সুন্দরভাবে সংক্ষিপ্ত করা হয়েছে.

ActivityPub ব্যাখ্যা করা হয়েছে


সূত্র: https://activitypub.rocks/



প্রোটোকলের দুটি প্রধান উপাদান রয়েছে: ইনবক্স এবং আউটবক্স। এই দুটি API এন্ডপয়েন্ট যা HTTP প্রোটোকলের মাধ্যমে অ্যাক্সেস করা যেতে পারে। যখন একজন ব্যবহারকারী বাইরের বিশ্বের সাথে কিছু যোগাযোগ করতে চান (যেমন, কিছু বিষয়বস্তু পোস্ট করুন), তারা এটি আউটবক্সে পাঠায়। এখানে, সিস্টেম এটিকে একটি উপযুক্ত তালিকায় যুক্ত করে, যা অনুসরণকারীরা আউটবক্স পড়ে অ্যাক্সেস করতে পারে।


যদি বহির্বিশ্ব থেকে কেউ ব্যবহারকারীর কাছে কিছু পাঠাতে চায় (যেমন, একটি অ-পাবলিক পোস্ট যা শুধুমাত্র নির্দিষ্ট ব্যবহারকারীদের দ্বারা দেখা যায়), তারা এনক্রিপ্ট করা আকারে ইনবক্সে পাঠায়। ইনবক্স একটি ইমেল ইনবক্সের মতো, যেখানে আগত বিষয়বস্তু সংগ্রহ করা হয় এবং যেখানে ব্যবহারকারী এটি অ্যাক্সেস করতে পারে।


WebFinger প্রোটোকল ব্যবহার করে কেউ ইনবক্স এবং আউটবক্সের অবস্থান পুনরুদ্ধার করতে পারে। এটি ActivityPub Explorer- এর সাহায্যেও পরীক্ষা করা যেতে পারে, এটি প্রোটোকল নিয়ে পরীক্ষা করার এবং বোঝার জন্য একটি সুপার টুল।


ActivityPub-এ একটি ব্যবহারকারীর নাম একটি ইমেল ঠিকানার মতো। উদাহরণস্বরূপ, আমার মাস্টোডন ব্যবহারকারীর নাম হল @[email protected]। এর মানে হল যে আমার ব্যবহারকারীর তথ্য dm.me সার্ভারে thebojda নামে সংরক্ষিত আছে।


ActivityPub এক্সপ্লোরারে প্রবেশ করা হলে, এটি ডেটা পুনরুদ্ধার করার জন্য WebFinger প্রোটোকল অনুযায়ী নিম্নলিখিত URL জিজ্ঞাসা করবে:


 https://me.dm/.well-known/webfinger?resource=acct:thebojda%40me.dm


প্রতিক্রিয়া একটি JSON অবজেক্ট যা এই মত দেখায়:


 { "subject":"acct:[email protected]", "aliases":[ "https://me.dm/@thebojda", "https://me.dm/users/thebojda" ], "links":[ { "rel":"http://webfinger.net/rel/profile-page", "type":"text/html", "href":"https://me.dm/@thebojda" }, { "rel":"self", "type":"application/activity+json", "href":"https://me.dm/users/thebojda" }, { "rel":"http://ostatus.org/schema/1.0/subscribe", "template":"https://me.dm/authorize_interaction?uri={uri}" } ] }


এখান থেকে নির্ধারণ করা যেতে পারে যে ActivityPub তথ্য https://me.dm/users/thebojda URL-এ অ্যাক্সেসযোগ্য হবে। আমরা যদি ActivityPub এক্সপ্লোরারে এটি প্রবেশ করি, তাহলে এটি নিম্নলিখিত JSON ফিরিয়ে দেবে:


 { "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", "toot": "http://joinmastodon.org/ns#", "featured": { "@id": "toot:featured", "@type": "@id" }, "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" }, "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" }, "movedTo": { "@id": "as:movedTo", "@type": "@id" }, "schema": "http://schema.org#", "PropertyValue": "schema:PropertyValue", "value": "schema:value", "discoverable": "toot:discoverable", "Device": "toot:Device", "Ed25519Signature": "toot:Ed25519Signature", "Ed25519Key": "toot:Ed25519Key", "Curve25519Key": "toot:Curve25519Key", "EncryptedMessage": "toot:EncryptedMessage", "publicKeyBase64": "toot:publicKeyBase64", "deviceId": "toot:deviceId", "claim": { "@type": "@id", "@id": "toot:claim" }, "fingerprintKey": { "@type": "@id", "@id": "toot:fingerprintKey" }, "identityKey": { "@type": "@id", "@id": "toot:identityKey" }, "devices": { "@type": "@id", "@id": "toot:devices" }, "messageFranking": "toot:messageFranking", "messageType": "toot:messageType", "cipherText": "toot:cipherText", "suspended": "toot:suspended", "focalPoint": { "@container": "@list", "@id": "toot:focalPoint" } } ], "id": "https://me.dm/users/thebojda", "type": "Person", "following": "https://me.dm/users/thebojda/following", "followers": "https://me.dm/users/thebojda/followers", "inbox": "https://me.dm/users/thebojda/inbox", "outbox": "https://me.dm/users/thebojda/outbox", "featured": "https://me.dm/users/thebojda/collections/featured", "featuredTags": "https://me.dm/users/thebojda/collections/tags", "preferredUsername": "thebojda", "name": "Laszlo Fazekas", "summary": "<p>Software developer, contributing writer</p>", "url": "https://me.dm/@thebojda", "manuallyApprovesFollowers": false, "discoverable": false, "published": "2023-03-02T00:00:00Z", "devices": "https://me.dm/users/thebojda/collections/devices", "publicKey": { "id": "https://me.dm/users/thebojda#main-key", "owner": "https://me.dm/users/thebojda", "publicKeyPem": "-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxlvpgcOxBikiXfm9snZt EB3Y2BSnBW3s8nd1d4Z1wCzaNfa/woB6RDQJoQYEISbMpkEyWhDzI4jRDafpn5/j YiyyGka9U2KZHv1to0Ej9uVwUcQOnsq9iUtJGhOWCP27blKGTLKFEHtPL2Y4hp4Z kYzlh1x0aAyw8YC7/nbS8WDAeZNS7R3ET7Syhp3LKiCMmL1aCLSoOQJ5DdxVikMJ rJ9bzlUjxzCsm1aNBB0i269t4fD1evBO8QDhEAOnAZ6wLEV74j9SCjYMvKRV8z5i PQbhbKntXjn1XhbkIkj1D+yGRYYfnm1XyWTuaM4mDllvuOyqJ8GQVFADLc6KCQYz 7QIDAQAB -----END PUBLIC KEY----- " }, "tag": [], "endpoints": { "sharedInbox": "https://me.dm/inbox" }, "icon": { "type": "Image", "mediaType": "image/jpeg", "url": "https://media.me.dm/accounts/avatars/109/955/144/019/799/820/original/fe8e930e0f1467ac.jpeg" } }


এখানে, আপনি আমার সম্পর্কে সমস্ত ব্যবহারকারী-নির্দিষ্ট তথ্য খুঁজে পেতে পারেন, তবে সবচেয়ে গুরুত্বপূর্ণ কী, এখানে ইনবক্স এবং আউটবক্সের শেষ পয়েন্টগুলির URL, সেইসাথে আমাকে পাঠানো বার্তাগুলি এনক্রিপ্ট করার জন্য সর্বজনীন কী রয়েছে৷ আউটবক্সের বিষয়বস্তু জিজ্ঞাসা করার সময়, নিম্নলিখিত JSON ফেরত দেওয়া হয়:


 { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://me.dm/users/thebojda/outbox", "type": "OrderedCollection", "totalItems": 1, "first": "https://me.dm/users/thebojda/outbox?page=true", "last": "https://me.dm/users/thebojda/outbox?min_id=0&page=true" }


যেহেতু পোস্টগুলি পৃষ্ঠাগুলিতে বিভক্ত, এখানে আমরা প্রথম এবং শেষ পৃষ্ঠাগুলির URL দেখতে পারি। প্রথম পৃষ্ঠার URL অ্যাক্সেস করে, আমরা আমার এন্ট্রি দেখতে পারি, যার মধ্যে বর্তমানে শুধুমাত্র একটি রয়েছে।


 { "@context": [ "https://www.w3.org/ns/activitystreams", { "ostatus": "http://ostatus.org#", "atomUri": "ostatus:atomUri", "inReplyToAtomUri": "ostatus:inReplyToAtomUri", "conversation": "ostatus:conversation", "sensitive": "as:sensitive", "toot": "http://joinmastodon.org/ns#", "votersCount": "toot:votersCount" } ], "id": "https://me.dm/users/thebojda/outbox?page=true", "type": "OrderedCollectionPage", "prev": "https://me.dm/users/thebojda/outbox?min_id=109955178005562038&page=true", "partOf": "https://me.dm/users/thebojda/outbox", "orderedItems": [ { "id": "https://me.dm/users/thebojda/statuses/109955178005562038/activity", "type": "Create", "actor": "https://me.dm/users/thebojda", "published": "2023-03-02T18:47:47Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://me.dm/users/thebojda/followers" ], "object": { "id": "https://me.dm/users/thebojda/statuses/109955178005562038", "type": "Note", "summary": null, "inReplyTo": null, "published": "2023-03-02T18:47:47Z", "url": "https://me.dm/@thebojda/109955178005562038", "attributedTo": "https://me.dm/users/thebojda", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://me.dm/users/thebojda/followers" ], "sensitive": false, "atomUri": "https://me.dm/users/thebojda/statuses/109955178005562038", "inReplyToAtomUri": null, "conversation": "tag:me.dm,2023-03-02:objectId=1406005:objectType=Conversation", "content": "<p>My &quot;ars poetica&quot;: How to Change the World?! Pocket Guide for People With a Messiah Complex <a href=\"https://medium.com/geekculture/how-to-change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">medium.com/geekculture/how-to-</span><span class=\"invisible\">change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a</span></a></p>", "contentMap": { "en": "<p>My &quot;ars poetica&quot;: How to Change the World?! Pocket Guide for People With a Messiah Complex <a href=\"https://medium.com/geekculture/how-to-change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">medium.com/geekculture/how-to-</span><span class=\"invisible\">change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a</span></a></p>" }, "attachment": [], "tag": [], "replies": { "id": "https://me.dm/users/thebojda/statuses/109955178005562038/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://me.dm/users/thebojda/statuses/109955178005562038/replies?only_other_accounts=true&page=true", "partOf": "https://me.dm/users/thebojda/statuses/109955178005562038/replies", "items": [] } } } } ] }


এই উদাহরণগুলির উপর ভিত্তি করে, একটি ন্যূনতম ক্লায়েন্টকে বাস্তবায়ন করা সহজ যা অন্যদের পাবলিক পোস্ট পড়তে পারে বা বাইরের বিশ্বে সর্বজনীন পোস্ট প্রকাশ করতে পারে। আমি এখানে পৃথক JSON ফাইলগুলির সঠিক কাঠামো এবং ইনবক্সের কার্যকারিতার মধ্যে যাব না।


এগুলি ActivityPub ডকুমেন্টেশনে পাওয়া যাবে।


দেখা যায়, ActivityPub একটি অপেক্ষাকৃত সহজ মান যা বোঝা এবং প্রয়োগ করা সহজ। এর একমাত্র দুর্বলতা হল এটি HTTP প্রোটোকল ব্যবহার করে, যার জন্য একটি কেন্দ্রীয় সার্ভার প্রয়োজন। এটি নস্ট্রের মতো বিকল্প প্রোটোকলের জন্ম দিয়েছে, যা জ্যাক ডরসির (টুইটারের প্রতিষ্ঠাতা) প্রিয় প্রকল্প।


যাইহোক, আমি বিশ্বাস করি এর কোন প্রয়োজন নেই, এবং এটি শুধুমাত্র সামাজিক নেটওয়ার্কগুলির আরও বিভক্ততা ঘটায়। পরিবর্তে, ActivityPub প্রোটোকলটি ইতিমধ্যে বিদ্যমান বিকেন্দ্রীভূত প্রোটোকলগুলির জন্য সমর্থন সহ প্রসারিত করা উচিত, যা ফেডিভার্সকে আরও বেশি উন্মুক্ত এবং বিকেন্দ্রীকৃত দিকের দিকে বিকাশের অনুমতি দেবে। নিম্নলিখিত, আমি এটা কিভাবে অর্জন করা যেতে পারে প্রদর্শন করা হবে.


বর্ণনামূলক ডেটা এবং ফিডগুলিকে বিকেন্দ্রীকরণের জন্য একটি নিখুঁত সমাধান হল সোর্ম ফিড বা আইপিএনএস ব্যবহার করা (এই প্রোটোকলগুলি সম্পর্কে আমার একটি সম্পূর্ণ নিবন্ধ রয়েছে)। Ethereum Swarm এর ক্ষেত্রে, ফিড শনাক্তকারী একটি Swarm ঠিকানা, IPNS এর ক্ষেত্রে, এটি একটি সর্বজনীন কী।


এগুলি ব্যবহার করে, একজন ActivityPub ব্যবহারকারী এইরকম দেখতে পাবেন: {swarm address}@swarm বা {IPNS address}@IPNS৷ ব্যবহারকারীর বিবরণ এখান থেকে জিজ্ঞাসা করা যেতে পারে।


পশ্চাদগামী সামঞ্জস্যের জন্য, গেটওয়ে সার্ভারগুলিও ব্যবহার করা যেতে পারে যেমন {swarm address}@gateway.ethswarm.org, যা ওয়েবফিঙ্গার প্রোটোকলের মাধ্যমে সোয়ার্মে সংরক্ষিত ব্যবহারকারীর বিবরণ ফিরিয়ে দেবে, বিদ্যমান সিস্টেমগুলিকে (যেমন মাস্টোডন) এই ডেটাগুলিকে কোনো প্রকার ছাড়াই পড়তে দেয়। পরিবর্তন


আউটবক্সের বাস্তবায়নও সোয়ার্ম বা আইপিএনএস ফিডের মাধ্যমে করা হবে। পশ্চাদপদ সামঞ্জস্য বজায় রাখার জন্য, একটি "বিকেন্দ্রীভূত_আউটবক্স" ক্ষেত্র প্রবর্তন করতে হবে, যেখানে একটি সোয়ার্ম ফিড (bzz://...) বা IPNS (ipns://...) ঠিকানা থাকবে।


অনগ্রসর সামঞ্জস্য বজায় রাখার জন্য, একটি অতিরিক্ত গেটওয়ে ঠিকানা মূল "আউটবক্স" ক্ষেত্রে অন্তর্ভুক্ত করা যেতে পারে যাতে বিদ্যমান ক্লায়েন্টরা কোনো পরিবর্তন ছাড়াই এই ফিডগুলি পড়তে পারে।


একটি ইনবক্স বাস্তবায়ন বিভিন্ন উপায়ে করা যেতে পারে। Ethereum Swarm-এর PSS নামে একটি মেসেজিং সিস্টেম আছে, কিন্তু অন্যান্য বিকল্পও আছে, যেমন Waku । এখানে, PSS বা Waku ঠিকানা একটি "decentralized_inbox" ক্ষেত্রে স্থাপন করা হবে, যখন মূল ইনবক্স ক্ষেত্রে একটি গেটওয়ে ঠিকানা থাকবে।


এই কয়েকটি ছোট এক্সটেনশনের সাহায্যে, Nostr-এর মতো নতুন প্রোটোকল প্রবর্তনের প্রয়োজন ছাড়াই ActivityPub সম্পূর্ণ বিকেন্দ্রীকৃত এবং "web3 সামঞ্জস্যপূর্ণ" করা যেতে পারে।


Nostr's GitHub রেপো অনুসারে, ActivityPub সার্ভার দ্বারা ব্যবহারকারীদের সম্ভাব্য সেন্সরশিপ এবং একটি প্রণোদনা সিস্টেমের অভাবের কারণে নতুন প্রোটোকল এবং রিলে সিস্টেমের প্রয়োজন। যাইহোক, এই সমস্যাটি উপরের এক্সটেনশন দ্বারা সম্পূর্ণরূপে সমাধান করা হয়েছে।


আইপিএনএস এবং সোয়ার্ম উভয়ই সেন্সরশিপ প্রতিরোধী, সোয়ার্ম সম্পূর্ণ বেনামী প্রদান করে। উপরন্তু, Swarm এর নিজস্ব প্রণোদনা ব্যবস্থা আছে, যখন FileCoin IPNS-এর জন্য উপলব্ধ।


আমি বিশ্বাস করি যে ভবিষ্যত স্পষ্টভাবে ActivityPub-এর অন্তর্গত, এবং ডেভেলপারদের উচিত নতুন প্রোটোকল তৈরি করার পরিবর্তে ActivityPub-এর অগ্রগতি এবং বিকশিত করার দিকে মনোনিবেশ করা, যাতে অবশেষে একটি ব্যাপক এবং সত্যিকারের ঐক্যবদ্ধ Fediverse প্রতিষ্ঠা করা যায়।