لقد لاحظت بنفسي أنني أكتب باستمرار جميع أنواع الأشياء الصغيرة والمعلومات المفيدة ، مجرد شيء من الحافظة مباشرة في محرر نصوص. يوجد دائمًا في مكان ما في الخلفية نص Sublime مفتوح مع مجموعة من علامات التبويب المعلقة.
ولقد لاحظت أيضًا أنه من الأنسب بالنسبة لي هيكلة المعلومات في ملف واحد باستخدام بناء الجملة Markdown - إنها أكثر متعة من النص المصدر ، وليست النتيجة المعروضة على نفس github.
بمرور الوقت ، لاحظت أن هناك الكثير من هذه الملفات المحفوظة ، ولن تنخفض علامات التبويب المفتوحة. لكن حركة واحدة مهملة وجميع المعلومات المتراكمة غير المحفوظة ستغرق في النسيان ، ولن تنظر من الأجهزة الأخرى أيضًا ، كما أن تشتت الآباء ليس مناسبًا جدًا.
كل هذا قادني إلى كتابة شيء مثل محركي الخاص لتخزين جميع المعلومات في مكان واحد وفي شكل مناسب. نعم ، نعم ، هناك مجموعة من جميع أنواع Evernote ، وبعض الملاحظات المضمنة في نظام التشغيل MacOS / iOS وما إلى ذلك تحتوي على التزامن والميزات مفيدة - ولكن كما يقولون ، تريد أن تفعل شيئًا جيدًا (لنفسك) ، افعل ذلك نفسي. ومثل أي مبرمج تقريبًا ، في أي موقف غير مفهوم أتناول كل شيء بنفسي وأكتبه. لذلك حدث هذه المرة.

لماذا؟
توجد بالفعل مشاريع مماثلة ، كما أن خدمات الوحوش المذكورة أعلاه ملائمة تمامًا ، ولكن بعض ميزاتها في مشروعي توفر بعض المزايا.
بادئ ذي بدء ، من الأنسب استخدامه كتوثيق للمشروع (في الواقع ، جاء الإلهام من الموقع بوثائق على Kotlin ، حيث استعرت معظم أنماط المحتوى الذي تم إنشاؤه).
المشروع مجاني تمامًا وهو في المجال العام ، وهو رابط إلى github في نهاية المقالة.
ماذا يمكن؟
- توليد HTML على الطاير - لم يتم حفظ النتيجة. يمكن نسخ المقالات الجاهزة في مجلدات كاملة إلى دليل المشروع المطلوب. تتم فهرسة جميع الملفات المضافة والمحذوفة تلقائيًا.
- يتم إنشاء التنقل أيضًا ، وليس الرمز الصلب.
- البحث بالمحتوى.
- التحكم في الوصول - يعمل تقريبًا مثل "مجموعات" للمؤسسات على github: كل مجموعة (دعوت دورها ) لديها قائمة بالمستخدمين وقائمة مسارات المجلدات / الملفات التي يمكن لمستخدمي هذه المجموعة مشاهدتها.
- عند البحث ، في التنقل ، إلخ. لن يرى المستخدم الصفحات التي لا يستطيع الدخول إليها.
- يمكن أيضًا إضافة المقالات في محرر مرئي (يحتوي على تمييز بناء الجملة وأزرار مثل github والمعاينة وما إلى ذلك)
- يتم تكوين كل شيء بسهولة من خلال صفحة الإعدادات ، والتي يتم إنشاؤها أيضًا (ويمكنك إضافة عناصر جديدة دون صعوبة). المجموع - يمكنك تثبيت المشروع محليًا في أمرين ، وإسقاط ملفات Markdown النهائية في والدك ، وتكوين الوصول والاستخدام بسرعة.
- مجموعة من الرقائق الصغيرة الأخرى ، مثل روابط الربط لجميع الرؤوس ، وأزرار النسخ عبر المقتطفات التي تحتوي على تعليمات برمجية ، إلخ. الخ.
كيف يعمل؟
على ماذا؟
لقد استخدمت NodeJS
express
NodeJS
، حيث بدا لي أن هذا المكدس هو الأقل استهلاكا للوقت لتنفيذ هذه المهمة المحددة.
حقوق الوصول
المنطق بسيط للغاية - passport
يحل جميع مشاكل الترخيص. يتم تخزين حقوق المستخدمين والمقالات في MongoDB
، وتتوافق مسارات المقالات مع مسارات الملفات الموجودة على القرص.
لا يتم تخزين "المجموعات" نفسها في أي مكان ، ويتم التحكم "من الأسفل": لكل مستخدم ومسار (إلى المقالة أو الفئة - أي إلى الملف والمجلد) قائمة "أدوار" خاصة به. إذا كان للمستخدم "دور" واحد على الأقل من قائمة المسار الذي يتبعه ، فيعتبر أنه يمتلك حق الوصول. لعرض أي مسار ، يجب أن يكون لدى المستخدم حق الوصول إلى المسار نفسه وإلى جميع الآباء: على سبيل المثال ، لرؤية الصفحة /pages/Documentation/Habr
، يجب أن يكون لديك حق الوصول إلى /pages
و /pages/Documentation
و /pages/Documentation/Habr
.
إذا كان بإمكان المستخدم عرض الصفحة ، فعندئذٍ ننتقل إلى الملف الموجود على القرص ونقرأ محتوياته ونعرضه.
مقالات
للتحويل ، Ruby
مكتبة لـ Ruby
، والتي تسمى kramdown
- يتم دعم جميع ميزاتها أيضًا.
بعد إنشاء HTML ، يتم تضمين الترميز في القالب المعد ، حيث يتم تضمين التنقل الذي تم إنشاؤه أيضًا.
يعمل جيل التنقل ببساطة شديدة - تحصل بشكل متكرر على قائمة كاملة بكل الملفات والمجلدات ، ثم يتم تصفيتها حسب حقوق المستخدم ، ويتم "إرفاق" البنية الناتجة بالقالب.
البحث يعمل بنفس الطريقة.
من أجل التصميم ، استخدمت materialize
، الأنماط من موقع توثيق Kotlin للمقالات نفسها ، وأخذت الأفكار من المحرر على جيثوب ، إلخ.
→ كود المصدر متاح هنا.
أنا لست NodeJS
- أو مطورًا في الواجهة الخلفية ، لكني أحب أن أشتت بسبب شيء مثير للاهتمام. لقد كتبت المقالة لأنني اعتقدت أن الشيء يبدو مفيدًا جدًا.
نعم ، هناك نظائر لها نفس الفكرة (لأكون صريحًا ، اكتشفت بعد التطوير) - ولكن ليس لديهم العديد من الميزات الموضحة أعلاه (وغير موصوفة هنا) ، والتنفيذ يبدو أكثر تعقيدًا: نفس موقع التوثيق Kotlin hardcodes navigation ، يعرف كيفية تنفيذ ميزات إضافية الشفرة ، ويبدو أن كل شيء - على الرغم من أن المشروع نفسه كبير إلى حد ما.
ملاحظة : لا يبدو أني انتهكت قواعد هابر ، والمقال لا يحتوي على وصف عام باستثناء الرابط إلى جيثب. إذا أبدى الناس اهتمامًا مفاجئًا ، يمكنني كتابة سلسلة من المقالات مع وصف تفصيلي لعملية التطوير بأكملها أو نقاط محددة - لأنه من غير المحتمل أن نفلت من مقال واحد هنا.