
خلاصات لا مركزية باستخدام DHT الخاص بـ BitTorrent. فكرة من Arvid و The_8472 "خلاصات RSS لـ DHT" http://libtorrent.org/dht_rss.html
الخلاصات اللامركزية باستخدام DHT الخاص بـ BitTorrent. الفكرة من Arvid و The_8472 "خلاصات RSS لـ DHT" http://libtorrent.org/dht_rss.html
ربما يكون DHT الخاص بـ BitTorrent واحدًا من أكثر الشبكات مرونة ومقاومة للرقابة على الإنترنت. يستخدم PeerTweet هذه الشبكة للسماح للمستخدمين ببث التغريدات لأي شخص يستمع. عند بدء تشغيل PeerTweet، يقوم بإنشاء تجزئة @33cwte8iwWn7uhtj9MKCs4q5Ax7B تشبه اسم المستخدم الخاص بك على تويتر (مثل @lmatteis). الفرق هو أنك تملك السيطرة الكاملة على ما يمكن نشره لأنك فقط تملك المفتاح الخاص المرتبط بهذا العنوان. علاوة على ذلك، بفضل DHT، لا يمكن لأي حكومة أو مؤسسة إيقاف ما تنشره.
بمجرد أن تجد عناوين PeerTweet أخرى تثق بها (وليست بريدًا عشوائيًا)، يمكنك متابعتها. هذا يهيئ عميلك لتخزين تغريدات هذا المستخدم وبثها إلى DHT بين الحين والآخر للحفاظ على خلاصته حية. هذا التعاون في متابعة الحسابات يسمح للخلاصات بالبقاء حية في شبكة DHT. كما ينشر بروتوكول PeerTweet أفعالك مثل I just followed @919c.. أو I just liked @9139.. و I just retweeted @5789... هذا يسمح للمستخدمين الجدد بإيجاد عناوين أخرى يمكنهم الوثوق بها؛ إذا كنت أثق في المستخدم @6749.. وهو يتابع @9801..، فربما يمكنني وضع علامة على @9801.. بأنه ليس بريدًا عشوائيًا. فكرة التغريد العلني عن أفعالك تسمح أيضًا بتحليل قوي مستقبلي للتنقيب في هذا الرسم البياني الاجتماعي.
يتبع PeerTweet معظم إرشادات التنفيذ المقدمة من اقتراح DHT RSS feed http://libtorrent.org/dht_rss.html. قمنا بتنفيذه فوق الاقتراح الحالي BEP44 الذي يوفر وظائف get() و put() عبر شبكة DHT. هذا يعني أنه بدلاً من استخدام DHT فقط للإعلان عن التورنت التي يتم تنزيلها حاليًا، يمكننا استخدامها أيضًا لوضع وجلب كميات صغيرة من البيانات (حوالي 1000 بايت).
يميز PeerTweet بين نوعين من العناصر:
@lmattes الخاص بك). يتم تنظيم رأس الخلاصة تقريبًا كما يلي:{
"d": <unsigned int of minutes passed from epoch until head was modified>,
"next": <up to 80 bytes of the next 4 items in the feed, directly 1,2,3 and 4 hops away. 20 bytes each.>,
"n": <utf8 name of the feed>,
"a": <utf8 http url of an image to render as your avatar>,
"i": <utf8 description of your feed>
}
{
"d": <unsigned int of minutes passed from epoch until when item was created>,
"next": <up to 80 bytes of the next 4 items in the feed, 1, 2, 4 and 8 hops away. 20 bytes each.>,
"t": <utf8 contents of your tweet. up to 140 chars>
}
سبب وجود مؤشرات متعددة للعناصر إلى عناصر أخرى في القائمة هو السماح بالبحث المتوازي. يختلف تنفيذ قائمة التخطي لدينا عن التطبيقات العادية وهو موجه للبحث عبر الشبكة، حيث يحتوي كل عنصر على 4 مؤشرات بحيث عندما نتلقى عنصرًا، يمكننا إصدار 4 طلبات get() بالتوازي مع عناصر أخرى في القائمة. هذا أمر بالغ الأهمية للوصول إلى خلاصات المستخدمين في الوقت المناسب لأن عمليات البحث في DHT لها أوقات استجابة غير متوقعة.
عند متابعة شخص ما، فأنت تخبر عميلك بشكل أساسي بتنزيل خلاصته وإعادة نشرها بين الحين والآخر. شبكة DHT ليست شبكة دائمة، وتختفي العناصر بسرعة من الشبكة بعد حوالي 30 دقيقة. للحفاظ على استمرارية الخلاصات، فإن وجود العديد من المتابعين أمر بالغ الأهمية لوقت تشغيل خلاصتك. وإلا، لا يزال بإمكانك الحصول على خادم في مكان ما يعمل على مدار الساعة طوال أيام الأسبوع للحفاظ على خلاصتك حية عن طريق إعادة نشر العناصر كل 30 دقيقة.
تثبيت التبعيات.
$ npm install
يأتي التطبيق مع بعض الارتباطات الأصلية. لقد استخدمت هذا الكود لجعله يعمل على جهاز الكمبيوتر الخاص بي:
المصدر: https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm install --save-dev electron-rebuild
# كل مرة تقوم فيها بتشغيل "npm install"، قم بتشغيل هذا
./node_modules/.bin/electron-rebuild
# على ويندوز إذا واجهت مشكلة، جرب:
.\node_modules\.bin\electron-rebuild.cmd
لجعل ed25519-supercop يعمل على ويندوز، كان علي أيضًا تثبيت node-gyp وكل ما يتطلبه node-gyp من Python2.7 و Visual Studio: https://github.com/nodejs/node-gyp
ثم قم بتشغيل هذه الأوامر لبنائه على ويندوز:
npm install -g node-gyp
cd ./node_modules/ed25519-supercop/
HOME=~/.electron-gyp node-gyp rebuild --target=0.36.9 --arch=x64 --dist-url=https://atom.io/download/atom-shell
قم بتشغيل هذين الأمرين بشكل متزامن في علامات تبويب مختلفة لوحدة التحكم.
$ npm run hot-server
$ npm run start-hot
ملاحظة: يتطلب إصدار node >= 4 وإصدار npm >= 2.
انظر electron-debug لمزيد من المعلومات.
انظر redux-devtools-dock-monitor لمزيد من المعلومات.
إذا كنت تستخدم أي مكتبات تابعة لجهات خارجية لا يمكن بناؤها مع webpack، فيجب عليك إدراجها في ملف webpack.config.base.js:
externals: [
// ضع مكتبات node التابعة لجهات خارجية التي لا يمكن بناؤها مع webpack هنا (mysql, mongodb, and so on..)
]
يمكنك العثور على هذه الأسطر في الملف.
استيراد ملف css كـ css-modules باستخدام .module.css.
$ npm run package
لتجميع التطبيقات لجميع المنصات:
$ npm run package-all
استخدم electron-packager لتجميع تطبيقك مع خيار --all لمنصات darwin (osx) و linux و win32 (windows). بعد البناء، ستجدها في مجلد release. وإلا، ستجد فقط واحدًا لنظام التشغيل الخاص بك.
سيتم تجاهل مجلدات test و tools و release و devDependencies في package.json افتراضيًا.
نضيف بعض peerDependencies للوحدات إلى خيار الإهمال كإعداد افتراضي لتقليل حجم التطبيق.
babel-core مطلوب بواسطة babel-loader وحجمه ~19 MBnode-libs-browser مطلوب بواسطة webpack وحجمه ~3MB.ملاحظة: إذا كنت ترغب في استخدام أي من الوحدات المذكورة أعلاه في وقت التشغيل، على سبيل المثال:
require('babel/register')، يجب عليك نقلها منdevDependenciesإلىdependencies.
يرجى مراجعة Building windows apps from non-windows platforms.
إذا كنت ترغب في الحصول على واجهة مستخدم شبيهة بالأصلية (OS X El Capitan و Windows 10)، فقد يناسبك react-desktop تمامًا.
هذا تفرع من مشروع https://github.com/chentsulin/electron-react-boilerplate.
MIT