مقدمة غنائية
في إحدى الأمسيات ، ووضع الأشياء في خزانة حائط ، عثرت على صندوق كرتون كبير. نجت من عمليتي نقل ولم تفتح لسنوات عديدة لدرجة أنني نسيت تمامًا ما تم تخزينه فيه. اتضح أنه كانت هناك صور - في ألبومات ، وفي مظاريف من متجر ، وبعضها كان هكذا.
تم التقاط العديد من الصور الفوتوغرافية منذ أكثر من سبعين عامًا. كان أحدهم جدًا - في سنوات طلابه ، لا يزال شابًا وسيمًا ، في نظارات
مدمرة تمامًا. "حسنا ، كان جدي يرتدي ملابس محب حتى قبل أن يصبح سائدا" ، فكرت ، وابتسمت بشكل لا إرادي. تعرفت عليه فورًا ، لكن بعد ذلك ذهبت إلى صور لأشخاص لا أتذكر أي شيء عنه. في ملامح الوجه ، يمكنك تخمين غامض العلاقة - وهذا كل شيء.

عندما كان عمري خمسة عشر عامًا ، عرضت جدتي هذه البطاقات مرارًا وتكرارًا وتحدثت عن أولئك الذين صوروا عليها. لسوء الحظ ، لا تُفهم قيمة هذه القصص إلا عندما لا يكون هناك من يرويها. في ذلك الوقت ، كان الأمر غير مهتم على الإطلاق بالنسبة لي للمرة العاشرة أن أستمع إلى بعض القصص الطحلبية عن سنوات ما قبل الحرب ، ولوحت بها وأتت أذني. الآن ، فجأة ، أدركت تمامًا أن جزءًا من تاريخ عائلتي قد ضاع دون رجعة ، حصلت على فكرة تنظيم ما تبقى والحفاظ عليه.
بدا لي الحل المثالي لتخزين بيانات العائلة مزيجًا من محرك الويكي وألبوم الصور. لم تكن هناك حلول مناسبة جاهزة ، لذلك اضطررت إلى كتابة حلمي. يطلق عليه
بونساي وهو مفتوح المصدر تحت رخصة معهد ماساتشوستس للتكنولوجيا. ثم ستكون هناك قصة حول كيفية تنظيمها وكيفية استخدامها ، وكذلك قصة تطورها وقليلا من
الدراما .

دراجة أخرى؟
اليوم ، هناك الكثير من الأدوات التي تتيح لك عمل أشجار عائلية وفهرسة معلومات عن الأقارب. وهي مقسمة إلى فئتين عريضتين - الخدمات عبر الإنترنت وتطبيقات سطح المكتب.
في حالة تطبيق سطح المكتب ، يتم تخزين قاعدة البيانات عادة كملف على القرص. يمكنك فتح التطبيق وتجديده في وضع المستخدم المفرد. إذا لزم الأمر ، يمكن تصدير البيانات للنسخ الاحتياطي أو النقل إلى نظام آخر (على سبيل المثال ، بتنسيق
GEDCOM ). من بين الأشياء التي شاهدتها ، بدا أن أكثر الألعاب متعة هي
Gramps (مجانًا)
وشجرة الحياة المحلية (تتطلب عملية شراء لمرة واحدة).
الجانب الآخر من الطيف هو خدمات الويب. يقومون بتخزين البيانات الخاصة بك على خوادم بعيدة وشحن رسوم الاستخدام الدوري. نظرًا لأن هذا منتج تجاري ذو قاعدة مركزية وتحقيق دخل جيد ، فإن خدمات هذه الخطة تمنحك الفرصة ، على سبيل المثال ، للبحث عن الأقارب المفقودين عن طريق اختبار الحمض النووي أو سجلات الأرشيف.
إيجابيات وسلبيات كلا الخيارين واضحة جدا. في الحالة الأولى ، تقوم بتخزين قاعدة البيانات محليًا والتحكم الكامل في الوصول إليها وإنشاء نسخ احتياطية. إذا كان التطبيق مفتوح المصدر ، إذا لزم الأمر ، يمكنك إضافة وظائف إضافية إليه. ومع ذلك ، سيكون من الصعب العمل مع قاعدة البيانات هذه أو عرض البيانات من جهاز آخر. في الحالة الثانية ، على العكس من ذلك ، يكون الوصول من أي جهاز ، لكنك تعطي بياناتك إلى أطراف ثالثة وتأمل في حشمتها. لا يوجد في تاريخ عائلتي أسرار رهيبة ومضللة ، ومع ذلك ، ما زلت أعتبر هذه المعلومات شخصية بحتة ، ومن حيث المبدأ ، لا أريد أن يقوم أي شخص آخر بتخزينها أو تحليلها.
بالنظر إلى أوجه القصور في كلا النهجين ، يمكننا صياغة قائمة بالمتطلبات للمحرك "المثالي":
- تطبيق الويب المستضاف على الخادم الخاص بك
- إنشاء مقالات حول الأشخاص والحيوانات الأليفة والأماكن والأحداث ، إلخ. مثل الويكي
- تحميل الوسائط
- علامات الأشخاص في الصور ومقاطع الفيديو
- بناء شجرة العائلة التلقائي
- التقويم مع جميع التواريخ الهامة.
- أدوات للتحرير المشترك وملء
في الإنصاف ، تمكنت من العثور على العديد من المشاريع ذات التطبيق المستضاف ذاتيا ، لكنها كانت في حالة يرثى لها: المظهر تجمد على مستوى منتصف 2000s ، لم يكن هناك مجموعة كاملة من الوظائف اللازمة ، ولم أكن أرغب في البحث في النصوص القديمة في PHP. بالإضافة إلى ذلك ، كان مشروع الحيوانات الأليفة السابق قد انتهى وكانت هناك رغبة في القيام بشيء جديد.
تقول القاعدة الذهبية:
إذا كنت تريد أن تعمل بشكل جيد - افعلها بنفسك!تم اختيار التقنيات المستخدمة وفقًا لثلاثة معايير: تجربتي معهم ، والشعبية وخالية من الانفتاح. هذه هي النتيجة:
- وقت التشغيل : .NET Core 2.1
- الخلفية : ASP.NET Core MVC
- قاعدة البيانات : PostgreSQL
- منطق الواجهة الأمامية : جزئيا فيو ، جزئيا مسج.
- أنماط الواجهة الأمامية : Bootstrap + Sass
وتشمل الأدوار الداعمة Elasticsearch للبحث عن النص الكامل و ffmpeg لأخذ لقطات من الفيديو.
مخطط البيانات
الكائنات الرئيسية في قاعدة بيانات Bonsai هي
صفحة وملف وسائط . ترتبط من خلال علاقة كثير إلى العديد من خلال
علامات . يمكن أن يكون للعلامة عنوان بدون رابط - على سبيل المثال ، إذا كنت بحاجة إلى وضع علامة على شخص ما في صورة ، لكن لا توجد معلومات على صفحة كاملة حوله.

بالإضافة إلى النص المجاني ، قد تحتوي الصفحة على
حقائق تم إدخالها في حقول خاصة في لوحة المسؤول. يتم احتساب حقائق إضافية على الحقائق: على سبيل المثال ، إذا أشرت إلى تاريخ ميلاد الشخص ، فسيتم وضع علامة في التقويم ، وستظهر صفحته العمر الحالي (أو العمر المتوقع ، إذا كان تاريخ الوفاة محددًا أيضًا) ، يمكن استخدام الجنس لتحديد الاسم الصحيح للعلاقة ("الأب") "أو" الأم "بدلاً من" الآباء "المشتركين) ، وهكذا. يتم تخزين الحقائق في قاعدة البيانات كوثيقة JSON.
هناك خمسة أنواع من الصفحات للاختيار من بينها: شخص ، حيوان أليف ، حدث ، مكان ، وما إلى ذلك. تعتمد قائمة الحقائق المتاحة على نوع الصفحة: على سبيل المثال ، "التعليم" مناسب فقط للشخص ، و "تاريخ الميلاد" خاص بالشخص والحيوان ، و "العنوان" مخصص فقط للمكان.
يتم ربط الصفحات
بالعلاقات : "الوالد" ، "الزوج" ، "الصديق" ، "المالك" ، "المقيم" والعديد من الآخرين. قد تكون بعض العلاقات محدودة في الوقت (الزوج ، المالك ، المقيم) ، والبعض الآخر يعتبر دائمًا.
عند حفظ أي صفحة أو علاقة ، يتم فحص النموذج الناتج للتأكد من اتساقه. على سبيل المثال ،
يجب أن تتداخل سنوات حياة الزوجين ، ولا يمكن لأي شخص أن يكون له أكثر من والد بيولوجي واحد من كل جنس ، ولا يمكن أن
يصبح والدك هو الآخر. الزواج من نفس الجنس ، ومع ذلك ، يجوز.
يؤدي تحرير صفحة أو ملف وسائط أو علاقة إلى حفظ
التغيير في قاعدة البيانات. يتيح لك هذا حفظ محفوظات التعديلات واستعادتها إذا لزم الأمر.
العلاقة
القرابة هي واحدة من أقدم المفاهيم في المجتمع. بالفعل في اللغة
ما قبل الهندو أوروبية ، كان هناك العديد من الأسماء بالنسبة لها ، والتي ، في شكل معدّل قليلاً ، انتقلت إلى اللغات الحديثة لمختلف المجموعات: سيتم فهم كلمة "الأم" من قبل الروسية والإنجليزية والصينية.
هناك الكثير من خيارات القرابة ، لكن الخيارات الأساسية هي ثلاثة:
الوالد والطفل والزوج . إنها تسمح لك بإنشاء رسم بياني موجه من الأسرة حيث تكون هذه العلاقات حوافًا والأشخاص هم العقد. في هذا العمود ، يمكنك التعبير عن أي علاقة أخرى ، ومعرفة المسار بين المشاركين وجنسهم: على سبيل المثال ، لتحديد جد شخص ما ، يجب أولاً العثور على والده (أي جنس) ، ثم والد هذا الوالد (ذكر) ، وهكذا.
في لوحة إدارة Bonsai ، يمكنك إدخال علاقات هذه الأنواع الأساسية الثلاثة. سيتم إنشاء العكس تلقائيًا لكل علاقة - الوالد للطفل ، الزوج / الزوجة / الزوج ، المالك للحيوانات الأليفة. يتم حساب جميع العلاقات الإضافية بواسطة المحرك وتظهر على الشريط الجانبي في الصفحة:

لحساب العلاقة ، يتم استخدام اجتياز الرسم البياني الأولي ، ويتم تعيين أسماء العلاقات في شكل DSL خاص:
public static RelationDefinition[] ParentRelations = { new RelationDefinition("Parent:m", ""), new RelationDefinition("Parent:f", ""), new RelationDefinition("Parent Child:m", "", ""), new RelationDefinition("Parent Child:f", "", ""), new RelationDefinition("Parent Parent:m", "", ""), new RelationDefinition("Parent Parent:f", "", "") };
حتى الشخص يمكن أن يكون له
العديد من الأقارب المباشرين. بونساي يقسم الروابط إلى المجموعات التالية:
- أقرب علاقة بالدم هي الأسرة التي نشأ فيها الشخص: الأم والأب والأجداد والإخوة والأخوات. إذا نظرت إلى الرسم البياني ، فهذا هو المسار من 1-2 خطوات للأعلى و 1 في اتجاه جانبي.
- الأسرة الخاصة : مجموعة واحدة لكل زوج وأطفال منه. ويشمل ذلك أيضًا أقارب الزوج - حمات الزوج ، وصهر الزوج وما شابه.
- أخرى : الأقارب البعيدين (الأحفاد ، الأعمام ، العمات) والعلاقات غير القرابة (الأصدقاء والزملاء).
في بعض الأحيان طريقة واحدة لتحديد عضوية المجموعة ليست كافية. قد تكون البيانات غير مكتملة ، لكنها لا تزال بحاجة إلى عرضها بأكبر قدر ممكن من الدقة. النظر في الرسم البياني الأخوة التالية:

كما نرى ، يُشار إلى زوجتين (فيرا وجالينا) وابن (بوريس) للإسكندر ، لكننا لا نعرف أي من الزوجات هي والدة الطفل - ربما هذا نوع من امرأة ثالثة ، لكنها لم تتم إضافتها بعد. في مثل هذه الحالات ، يمكن الإشارة إلى عدة مسارات يجب أن تكون موجودة أو غير موجودة ، وعلامات مميزة بعلامة
+
و
-
على التوالي:
new RelationDefinition("Spouse Child+Child", "||", "") new RelationDefinition("Spouse Child-Child:m", "") new RelationDefinition("Spouse Child-Child:f", "")
شجرة العائلة
يجب أن يكون أي محرك أنساب لائق قادرًا على بناء شجرة العائلة. هذه هي الطريقة الأكثر مرئية لإظهار المعلومات العامة عن الأشخاص وعلاقاتهم الأسرية. يتم تخزين البيانات في قاعدة البيانات في شكل رسم بياني موجه ، ومن الناحية النظرية ، ينبغي أن يكون من السهل تصور. في الممارسة العملية ، مع عرض الشجرة نشأت معظم الصعوبات.
فيما يلي بعض الأمثلة على شكل أشجار العائلة:

شجرة عائلة Targaryenov. مضغوط جدا ، لأنه مصنوع باليد. سيكون إنشاء مثل هذه الشجرة من البيانات التعسفية أمرًا بالغ الصعوبة تلقائيًا.

الآلهة اليونانية. يتم إنشاء التمثيل الرسومي من
بناء جملة تخفيض خاص ، لا تزال بحاجة فيه لترتيب جميع الكتل يدويًا ورسم الروابط بينها. يشبه ASCII الفن.

عرض شجرة على شكل مخطط نصف دائري. يتم إنشاؤه بسهولة تلقائيًا ، ولكنه يراعي الأجداد المباشرين فقط.
نظرت من خلال العديد من الخيارات. الأكثر جمالياً كان على موقع MyHeritage:

يمكن تقسيم عرض هذه الشجرة إلى ثلاث خطوات مشروطة: الحصول على البيانات من قاعدة البيانات ، وترتيب الكتل / خطوط الاتصال ، وعرضها مباشرة على الصفحة. إذا كان كل شيء تافها مع الخطوات الأولى والثالثة ، ثم تعثرت في الخطوة الثانية.
انتهت محاولات إلقاء حل عصامي على عجل بإخفاق تام. يعتبر الترتيب المناسب لعناصر الرسم البياني منطقة معقدة حيث
تتم كتابة أطروحات عليها ،
والمكونات النهائية تشبه شقة في موسكو. حسنًا ، لن تكون قادرًا على كتابة نفسك ، لكن بالتأكيد هناك حلول مجانية لائقة؟
كانت معظم آمالي في
مكتبة D3.js. ربما هذا هو أول ما يتبادر إلى الذهن إذا كنت بحاجة إلى رسم رسم بياني أو مخطط على صفحة ويب. للأسف ، من بين أكثر من ثلاثمائة (!) أمثلة على الويكي ، لم يكن هناك أكثر أو أقل شبهاً بشجرة مع MyHeritage.
كانت الخطوة التالية هي الغوص في المكتبات التي لم تشارك في العرض ، ولكن في حساب الترتيب الأمثل للعناصر في الرسم البياني. معظمهم يقدمون ما يسمى
تخطيط القوة . هذا أسلوب بسيط للغاية ، يعتمد على الصيغ المادية: يتم تمثيل العقد من الرسم البياني بواسطة أجسام مرنة ، ويتم تمثيل خطوط الاتصال بواسطة الينابيع. يمكن التعرف عليه بسهولة من خلال الرسوم المتحركة المميزة له - يبدو أن الرسم البياني "يستقيم" أثناء التنقل ، وهذه ليست ميزة إضافية ، ولكنها نتيجة حتمية لطبيعة محاكاة الخوارزمية. يعد أسلوب تخطيط القوة مفيدًا لتصور البيانات بدون تسلسل هرمي واضح (على سبيل المثال ، الاتصالات في الشبكات الاجتماعية) ، لكن شجرة العائلة في هذا النموذج تبدو معيبة.
خيار آخر في الاعتبار هو مكتبة
Graphviz . يمكن تمييز نتيجة عملها بسهولة من خلال الأسهم المميزة.
يتم استخدام لغة خاصة
DOT لوصف الرسم البياني. تبدو حالات الاختبار أكثر أو أقل ، ولكن تنشأ مشاكل مع البيانات الحقيقية: الأسهم "تنفصل" وتتصل بزوايا غريبة ، يزحف الرسم البياني ، ولا يمكنك ضبطه ولن تتغلب عليه.
بعد عدم العثور على حل مناسب بمفردي ، قررت أن أطلبه بشكل مستقل ، ثم بدأت
DRAMA بالذات.
تم تقديم الطلب في صباح يوم 22 أكتوبر ، وفي غضون ساعة تلقى عدة ردود. أحد المجيبين كان يسمى فلاديسلاف. أرسل مثالاً على حل مماثل ووعد باستكمال المهمة في
يوم واحد . بدت هذه السرعة مشبوهة بالنسبة لي ، لكنني كنت آمل في تجربته ونفسي أعطيت الرجل خطأً لمدة أسبوع. في اليومين الأولين ، طرح فلاديسلاف أسئلة إضافية ، ولم يفاجئني أبدًا غمر عميق في المشروع وموقف منتبه إلى التفاصيل ، ثم اختفى. استيقظ في الأول من نوفمبر ، واعتذر عن الاختفاء القسري لأسباب عائلية وأرسل رابطًا مع إصدار تجريبي بدا يشبه إلى حد كبير ما أراد إذا لم يكن للعقدة في خطوط الاتصال في الوسط:

اختفاء المؤدي هو دائمًا دعوة للاستيقاظ ، لكنك لا تعرف أبدًا ، يحدث أي شيء لأنه فعل شيئًا. دعه يستمر! لقد أرسلت الدفع المسبق وبدأت في انتظار التحسينات. بعد يومين ، كتب فلاديسلاف أنه لا يستطيع حل المشكلة ، ثم اختفى مرة أخرى - هذه المرة لمدة ثلاثة أسابيع. خلال هذا الوقت ، لم يفعل شيئًا ورفض إعادة الدفعة المقدمة ، لأن "المهمة تم تنفيذها فعليًا من قبل
صديق سابق غبي خذل نفسه ولا يعيد المال." بعد بضعة أسئلة توضيحية ، توقف المندوب المؤسف عن محاولة إعفاء نفسه وإيقافه. والآن نحن نعيش - وأذكره بشكل دوري بالديون ، ورداً على ذلك ، يرسل لقطة شاشة من التطبيق المصرفي - يقولون: "لا يوجد مال ، لكن حالما يحدث ذلك". أتمنى نجاح فلاديسلاف في الأعمال التجارية وأغني بسرعة!
ألقى الطفل - ناقص في الكرمة!لم يكن فقدان المال أمرًا مزعجًا جدًا ، ولكن مر شهر ، ولم تتحرك المهمة على الأرض ، والآن لم يعد هناك مكان لانتظار المساعدة. بادئ ذي بدء ، كنت غاضبًا من نفسي: لقد سلكت الطريق الأقل مقاومة ، وانتهكت
القاعدة الذهبية - وهنا هي النتيجة. مليئة بالغضب الصالح ، جلست مرة أخرى لدراسة المكتبات لرسم الرسوم البيانية - وها! - وجدت فجأة بالضبط ما تحتاجه.
كانت تسمى المكتبة
Eclipse Layout Kernel ، اختصار ELK. كما قد يتصور ، يتم استخدامه لعرض الرسوم البيانية في Eclipse IDE ، لكن يمكن استخدامه أيضًا بشكل مستقل. بشكل عام ، هو مكتوب بلغة جافا ، ولكن هناك نسخة البث في JS. نعم ،
رمزها هو
كابوس ويزن واحد ونصف ميغابايت ، ولكن يمكن أن يغفر هذا القصور لأنه
يعمل فقط ويفعل الشيء الصحيح بالضبط. الواجهة أولية: يتم نقل العقد والحواف والإعدادات إلى الإدخال ، وعند الإخراج نحصل على الإحداثيات. يمكنك رسم شجرة باستخدامها بأي طريقة مناسبة: لقد اخترت SVG لربط الخطوط و divs مع تحديد الموقع بشكل مطلق للكتل.
استغرق تكامل المكتبة واختيار الإعدادات الأمثل ليلتين على قوة. هذا ، بطبيعة الحال ، ليس "يومًا واحدًا" ، كما وعدت صاحبة عمل سيئ الحظ وغير متكبر ، لكنها قريبة جدًا. نتيجة لذلك ، تمكنت Bonsai من عرض الشجرة في هذا النموذج تقريبًا:

الآن المشكلة الوحيدة المتبقية هي وقت المعالجة. يستخدم ELK خوارزمية تكرارية: يمكنك الاقتراب من الموضع الأمثل من خلال قضاء وقت إضافي. على شجرة مكونة من 20 إلى 30 عنصرًا ، تتطلب النتيجة الجيدة حوالي 5 ثوانٍ. لهذا السبب ، يتم فتح صفحة بها شجرة في كل مرة لفترة طويلة ، وتبدأ بسرعة في الإزعاج. في الإصدار التالي ، سيتم نقل الحساب إلى الواجهة الخلفية بحيث يمكن إجراؤه مرة واحدة عند تغيير الصفحة وذاكرة التخزين المؤقت.
بحث النص الكامل
سيكون نظام لتخزين المعلومات النصية عديم الفائدة دون البحث عن النص الكامل المريح. تستخدم Bonsai قاعدة بيانات PostgreSQL ، لذا فإن أول ما قررت هو التحقق مما يمكن أن تقدمه من الصندوق. خيبة أمل أخرى:
tsvector
مع الكلمات العادية ، لكنها ترفض البحث عن أهم شيء - الأسماء والألقاب:
SELECT to_tsvector('') @@ to_tsquery(''),
Trigrams أيضا لم يعطي أي شيء جيد. في النهاية ، استقرت على خيار متوقع إلى حد ما: ElasticSearch +
المورفولوجيا الروسية . اتضح أنه غير مريح للغاية للعمل معها من. NET ، ومع ذلك ، فهو يتواءم مع البحث عن خمسة صلب باسمه الكامل.
وعي النقص
عند العمل في مشروع ما ، تحدث المواقف بشكل منتظم عندما كان غاضب
الكمال الداخلي غاضبًا من الحل المختار. مجال الموضوع غير قياسي إلى حد ما ولا تعمل "الأخلاق الحميدة" المقبولة عمومًا دائمًا.
على سبيل المثال ، ماذا يحدث عندما نفتح أي صفحة؟
- يتم ترجمة نص الصفحة من تخفيض السعر إلى HTML. إذا كان النص يحتوي على روابط إلى صفحات أخرى وملفات الوسائط ، فسيتعين عليك الذهاب إلى قاعدة البيانات للحصول على مزيد من المعلومات.
- يتم إلغاء تسلسل الحقائق من JSON حيث يتم تخزينها في قاعدة البيانات ، في نموذج العرض.
- يتم تحديد العلاقات. للقيام بذلك ، من قاعدة البيانات التي طالت معاناتها ، من الضروري الحصول على رسم بياني الاتصال بالكامل والعثور على العقد فيه وفقًا لقائمة المسارات المعروفة مسبقًا.
للوهلة الأولى ، يبدو هذا كأنه عملية صعبة بشكل رهيب ، لكن في الواقع لا يكون ذلك بسبب قلة البيانات نسبياً. كم من الأقارب يمكنك أن تتذكر وتريد الكتابة؟ حاول إعادة فرز الأصوات من أجل الاهتمام وتجد أنه سيكون من الصعب للغاية طلب مائة على الأقل. وكم من الناس يريدون منح حق الوصول؟ حتى عدد كبير فلكي لعائلة هو ألف شخص! - وفقا لمعايير قواعد البيانات الحديثة ، فإنه لا يزال مثير للسخرية.
بالطبع ، لا يزال نموذج عرض الصفحة المترجمة مؤقتًا في المرة الأولى التي يتم فيها فتحه وإعادة استخدامه على الأنواع اللاحقة ، وذلك أساسًا لأنه كان من السهل جدًا تنفيذه. تعتبر قاعدة إبطال ذاكرة التخزين المؤقت للتغييرات في لوحة الإدارة بسيطة بقدر الإمكان: إذا قمنا فقط بتغيير النص وبعض الحقائق
المحلية (قائمة اللغات ، فصيلة الدم ، لون الشعر ، إلخ) ، ثم أعد تعيين هذه الصفحة المحددة فقط. مع أي تغيير آخر - اسم الصفحة أو تاريخ الميلاد أو الجنس ، إضافة أو تغيير أي اتصال - تتم إعادة تعيين ذاكرة التخزين المؤقت
بالكامل . نعم ، هذه ليست أذكى طريقة لتنظيف. نعم ، بالتأكيد ، يمكنك كتابة خوارزمية معقدة من شأنها إعادة ضبط ما تحتاج إليه فقط - لكن بالنسبة لهذا المشروع ، لن يبرر التكاليف.
لا يدعم المشروع التعريب وتغيير المظهر ، ويعمل التفويض على OAuth على Facebook \ Google ، ويتم إنشاء لوحة المشرف على النماذج المعتادة ، وليس إطار عمل SPA استنادًا إلى أحدث صيحات الموضة. كل هذا
يمكن إدراكه أو تحسينه ، لكنه لن يحل أي مشكلة ، وبالتالي فقد يضيع الوقت.
نتطلع إلى المستقبل
سبب آخر لعدم وجود أي معنى للاستثمار في تعقيد جهاز المحرك هو الطبيعة المؤقتة للتنفيذ مقارنة بالبيانات التي يخزنها. فقط فكر للحظة: شبكة الإنترنت في شكلها الحالي كانت موجودة منذ ما يقرب من عشرين عامًا ، وتاريخ الأسرة موجود منذ
قرون . لم يقم أحد بعد بحل هذه المشكلة ببساطة لأن صناعة تكنولوجيا المعلومات نفسها أقل بكثير. ما الذي يمكن عمله؟
يجب إعادة كتابة المحرك بشكل منتظم من البداية - تمامًا كما حدث منذ آلاف السنين ، كان الرهبان صعبًا في نسخ النصوص من الكتب المتداعية إلى الكتب الجديدة. والفرق الوحيد هو أن الكتاب يمكن أن يكذب مائة عام مع المعالجة المناسبة ، والتطبيق - على قوة 15-20 سنة. آمل ألا أتمكن بعد 20 عامًا من القيام بذلك بنفسي ، لكن خلال عشرين عامًا أخرى ، سيتعين على أولادي أو أحفادي القيام بذلك. أود أن أترك لهم مصدرًا بسيطًا ومفهومًا وموثقًا.
في المراحل الأولى من التصميم ، أردت أن أدمج لغة معينة تشبه SQL في المحرك ، وبمساعدة يمكنني الحصول على إجابات لأسئلة محددة: "ما هي النسبة المئوية لأسلافي بعيون زرقاء" ، "عندما اشتريت إيفان السيارة الأولى" وما إلى ذلك. يجب التخلي عن هذه الفكرة لأنها تتطلب بدلاً من النص العادي إدخال جميع المعلومات في شكل رسمي معين ، ولن يستغرق سوى وصف لهذا النوع سنوات. من ناحية أخرى ، يكتسب فهم اللغة الطبيعية زخماً. لن أفاجأ إذا كان من الممكن خلال عشرة أو عامين أن تطلب من Siri قراءة النص نيابةً عنك ، واتباع الروابط ، ونتيجة لذلك ، تقديم مقتطف من الحقائق. الرجال ، ودفع!
كيف تجرب؟
لسوء الحظ ، لا يمكنني تقديم رابط إلى العرض التوضيحي النهائي: لا يوجد خادم يمكنه تحمل تأثير habra. لكن هناك بعض لقطات الشاشة المرئية (الصور قابلة للنقر).

إذا بدت Bonsai مفيدة لك وتريد تشغيلها بنفسك ، فيمكنك تنزيل التعليمات البرمجية المصدر من Github:
https://github.com/impworks/bonsaiيتم توفير إرشادات التثبيت المفصلة في الملف التمهيدي. ستحتاج هذا:
- .NET Core 2.1+
- PostgreSQL 10+
- ElasticSearch 5.x و المورفولوجيا المساعد الروسي
- تطبيق Facebook أو Google للحصول على إذن oAuth
بعد الإطلاق الأول ، يتم إنشاء العديد من صفحات الاختبار والصور في قاعدة البيانات. للإنتاج ، هذا السلوك غير ضروري ويتم تعطيله بواسطة العلم في الإعدادات.
منذ شهر واحد فقط ، أطلقت مثلي وبدأت تشغيله ، والحصول على بيانات حقيقية. تمت مواجهة بعض الخشونة ، لكنني غير راضٍ تمامًا عن النتيجة. الآن سيتم تطوير المشروع تدريجيا والانتهاء منه. المهام الأساسية هي تسريع عرض الشجرة ، والسماح بتنزيل المستندات في شكل PDF وإضافة صقل لحقوق الوصول. سيكون من الجيد تحسين قابلية استخدام لوحة المشرف في بعض الأماكن أو التعرف على الوجوه في الصورة تلقائيًا -
لكن هذا ليس دقيقًا .