الدروس · الدرس 3 من 5
بابان إلى قائمة
أيّ القوائم المنسدلة يمكنك الإضافة إليها من داخل النموذج، وأيّها لا يمسّه إلا المالك، ولماذا المقفلة مقفلة، وكم تكلّف القيمة بعد أن تشير إليها سجلّات.
الدرس 3 من 5 · 20 د
القوائم خلف المنسدلات
كل منسدلة تقريباً في هذا التطبيق قائمة يستطيع أحد تحريرها. وبعض تلك القوائم يجوز لك أن تضيف إليها بنفسك، من داخل النموذج الذي تملؤه أصلاً. ومعظمها لا يجوز، والرفض مقصود. وهذا الدرس عن أيّهما أيّ، وكم يكلّف التغيير لاحقاً.
عدد تلك القوائم تسع وأربعون. وتعيش على شاشة واحدة، الإعدادات ← القوائم والرموز على /settings/reference-data، وهي تصف نفسها بدقّة: القوائم القابلة للتحرير خلف القوائم المنسدلة في التطبيق. أضِف القيم أو أعِد تسميتها أو أرشِفها (الأرشفة تُبقي السجلات الحالية صالحة — لا يُحذف شيء). المالك فقط.
وتسع عشرة من التسع والأربعين يمكن الإضافة إليها كذلك من داخل النموذج، من شخص ليس المالك. والثلاثون الباقية لا يمكن، لأحد، بمن فيهم المالك. وتسع عشرة وثلاثون تصير تسعاً وأربعين، والقسمة ليست اعتباطية.
كل شاشة وحقل وقاعدة تُذكر على هذه الصفحة قُرئت من التطبيق نفسه. وحيث تخالف الشاشة التي أمامك الصفحة، فالشاشة على حقّ والصفحة قديمة.
الباب داخل النموذج
افتح منسدلة وحدة مادة، أو نوع قماش موديل، فيكون الخيار الأخير في القائمة + Add a new value…. اخترها فتظهر خانة صغيرة. اكتب واحفظ، فتُنشأ القيمة وتُختار في حركة واحدة.
وذلك الخيار ليس موجوداً دائماً. فالصفحة تقرّر عرضه بسؤال واحد عن الشخص والقائمة معاً: أيجوز لهذا الدور إنشاء قيمة من هذا النوع؟ والجواب استدعاء دالة واحدة، وذلك الاستدعاء يؤدّي عملين في آن.
- هو قائمة المسموح. فالخريطة التي يقرؤها لا تحمل إلا أنواع القوائم القابلة للإضافة. اسأله عن نوع ليس في الخريطة فالجواب لا، أياً كان السائل.
- وهو بوّابة الدور. فكل نوع قابل للإضافة مربوط بالوحدة التي تملكه. فنوع القماش ونوع الصنف يخصّان الموديلات، فمن له صلاحية الكتابة على الموديلات يضيف واحداً. والوحدة تخصّ المواد.
وثماني عشرة من القوائم التسع عشرة القابلة للإضافة تملكها الموديلات. وهي مفردات الملف الفني نفسه، وتنتظم في أربع عائلات.
- القماش والشكل: نوع القماش، ونوع الصنف، وبنية القماش.
- الحياكة: نوع الإبرة، ونوع الخيط، ونمرة الخيط، وقاعدة لون الخيط، والغرزة الراجعة، والتثبيت.
- التجهيز: عناية الغسيل والتجهيز، وطريقة الصباغة، ودرجة ثبات اللون، ومعيار اختبار الغسيل، ودورة الغسيل، وملمس اليد، ونوع الطيّ.
- البطاقات: تعليمة العناية، ولغة العناية.
والتاسعة عشرة هي الوحدة، وتملكها المواد.
ومشرف الإنتاج لا صلاحية كتابة له على أيّ منهما، فلا يظهر الخيار له قط. ولو استدعى الإجراء بطريقة ما لرُفض بالكلمات: You don't have access to add a value here — ask the Owner to add it in Settings → Reference data. فالشاشة والخادم يسألان السؤال نفسه، وهذا هو النمط الذي تتوقّعه في كل مكان من هذا التطبيق.
ماذا يفعل الباب الداخلي قبل أن يُنشئ شيئاً
هو بحث ثم إنشاء، والبحث أدقّ ممّا يبدو.
- يُقلَّم النصّ وتُختصر تتابعات المسافات إلى واحدة. وما زاد على ستين حرفاً يُرفض لطوله.
- ثم يبحث عن قيمة فعّالة في تلك القائمة تطابق تسميتها أو رمزها بلا تمييز حالة الأحرف. فالتطابق يُعاد استعماله ويُرجَع. ولا يُدخَل صفّ ثانٍ أبداً.
- وعندها فقط يبحث عن تطابق مؤرشف. فإن وجده رفض، وسمّاه: "Ripstop" was retired by an admin. Ask the Owner to restore it in Settings → Reference data.
- وإن لم يطابق شيء، أنشأ. والرمز الذي يخزّنه يتبع عرف القائمة نفسها. فالوحدة تسميتُها بأحرف صغيرة مع حذف كل ما ليس حرفاً أو رقماً، بحدّ ستة عشر حرفاً. ونوع القماش أو الصنف تسميتُه هي رمزه، بحالة أحرفه كما هي، لأن هكذا كُتبت القيم المزروعة.
والخطوة الثالثة هي المثيرة. فإحياء قيمة مؤرشفة قرار حوكمة، والنموذج ليس مكان اتخاذ قرارات الحوكمة. فالباب الذي يتيح لك الإضافة ليس عن قصد هو الباب الذي يتيح لك نقض تقاعد أحدهم.
الباب في الإعدادات
باب المالك يفعل الأمور الثلاثة التي لا يفعلها الباب الداخلي: إعادة التسمية، وإعادة الترتيب، والتقاعد.
ولا حذف. فالفعل الوحيد على دورة حياة الصفّ هو الأرشفة، التي تقلب علامة وتخفي القيمة عن كل منسدلة، والاستعادة، التي تعيدها. وتقول الشاشة السبب بكلماتها: الأرشفة تُبقي السجلات الحالية صالحة، ولا يُحذف شيء.
وهذا هو الشكل الصحيح، لأن القيمة المرجعية ليست تسمية على قائمة طعام. بل قيمة مخزَّنة على سجلّات، والدرس التالي عمّا يحدث لتلك السجلّات حين تتغيّر القيمة تحتها.
موسم من الكتابة في Riche Terre
على مدى موسم واحد، اختار بناة الملفات الفنية في Riche Terre + Add a new value… على قائمة أنواع القماش إحدى وثلاثين مرة. وإليك ما فعلته الفحوص الأربعة بتلك المحاولات الإحدى والثلاثين.
| النتيجة | المحاولات | ماذا رأى الشخص |
|---|---|---|
| أُعيد استعمال قيمة فعّالة، بمطابقة التسمية أو الرمز | 19 | القيمة مختارة، بلا صفّ جديد |
| رُفض، لأن قيمة مؤرشفة تحمل الاسم | 2 | الاسم، ومن يُسأل |
| أُنشئت قيمة جديدة | 10 | القيمة مختارة، وصفّ واحد جديد |
| المجموع | 31 |
نمت القائمة بمقدار عشرة، لا إحدى وثلاثين. فالناس كتبوا اسماً أكثر من ثلاث مرات مقابل كل نوع قماش جديد فعلاً أدخلوه، والمطابقة بلا تمييز حالة الأحرف على التسمية أو الرمز امتصّت الفارق في صمت. فـ Poplin و poplin و POPLIN قيمة واحدة هنا، ولم يُضطر أحد إلى تأنيب أحد.
وتلك النسبة تستحقّ القياس على مساحة عملك أنت. فإن قاربت الواحد، أي أن كل محاولة تقريباً تُنشئ صفّاً جديداً، فمفرداتك تُخترع لا تُعاد، ومنسدلتك ستصير غير قابلة للاستعمال خلال موسم.
لماذا ثلاثون قائمة مقفلة
القوائم الثلاثون المقفلة ليست بقية عشوائية. اقرأها يظهر نمط.
| النوع | أمثلة من الثلاثين | لماذا لا يضيف النموذج واحدة |
|---|---|---|
| مفردات دولية ثابتة | العملة، وشرط التسليم، ورمز العناية | الرموز معرَّفة في مكان آخر ولا صوت لنا فيها |
| مُدخَل لمحرّك | خطة AQL، ومستوى فحص AQL، ودرجة AQL | القيمة خارج الجدول تكسر حساب المعاينة |
| الامتثال والدليل | نوع الشهادة، ولائحة الامتثال، ومعيار الاختبار | هذه تسمّي أنظمة حقيقية لها جهات إصدار حقيقية |
| عابرة للفرق | بلد المورّد، وشرط الدفع، ومقياس المقاسات | راحة فريق واحد تصير بيانات الجميع |
| ذات أب | المقاس، وهو يتبع مقياس مقاسات | لا مكان في النموذج للسؤال عن الأب |
والحارس آليّ لا مسألة سياسة. فقائمة الأنواع القابلة للإضافة خريطة جزئية، فالنوع الذي لم يضفه أحد إليها مقفل افتراضياً. ولا يحتاج أحد إلى تذكّر إقفال مفردات جديدة. فهي تصل مقفلة وتبقى كذلك ما لم يفتحها أحد عن قصد.
والسبب مكتوب في الشيفرة بجانب مُدخلات AQL: سكّ قيمة AQL خارج القائمة من نموذج سيكسر محرّك المعاينة. وليست تلك أناقة. فمستوى الجودة المقبول (AQL) مُدخَل في حساب يقرّر خروج شحنة. والقيمة التي لم يسمع بها الحساب قط لا رقم قبول لها، ولا رقم قبول يعني لا قرار.
القائمة الوحيدة التي تُضيَّق مرة أخرى عند الاستعمال
العملة مثال جيّد على قفل يُطبَّق مرتين، ويسهل تفويت الثاني.
قائمة العملات المزروعة تحمل ثمانية رموز: الدولار الأمريكي، والجنيه المصري، واليورو، والجنيه الإسترليني، واليوان الصيني، والليرة التركية، والروبية الهندية، والتاكا البنغلاديشية. لكن افتح حقل مال فتُعرض عليك أربعة منها. فمحرّك التكلفة وأسعار الصرف يفهم أربع عملات اليوم بالضبط، والتطبيق يصفّي القائمة إلى تلك المجموعة قبل أن يرسم المنسدلة.
والتعليق بجانب ذلك المصفّي يذكر السبب أفضل ممّا يستطيع درس: عرض رمز سيعامله المحرّك بصمت كأنه دولار أمريكي كذبة. فتبقى القائمة أمينة عند ثمانية، وتبقى المنسدلة أمينة عند أربعة، والفارق قيدٌ تراه لا رقمٌ خاطئ لا تراه.
المكرّر الذي أنشأه عرف تسمية
لن يلقى Riche Terre هذا، لأن مساحة عمله أُنشئت بعد الواقعة. وهو مع ذلك أفضل توضيح متاح لما يكلّفه الرمز المرجعي، وقد حدث لهذا التطبيق لا لتطبيق افتراضي.
كُتبت القوائم المزروعة أكثر من مرة مع نموّ التطبيق، وتغيّر عرف الرموز بين الكتابتين. فالقيم المبكرة استعملت حالة العنوان والشرطة السفلية — Tee وskipped_stitch. والمتأخرة استعملت الأحرف الصغيرة والشرطة — tee وskipped-stitch. والزارع لا يحدّث صفّاً إلا حين يطابق الرمز تماماً. فالرمز المتغيّر إذن لم يستبدل الصفّ القديم. بل أدخل ثانياً، وقاعدة عدم الحذف أبقت الاثنين.
وكانت النتيجة أزواجاً شبه متطابقة في المنتقيات. وكان على الإصلاح أن يختار ناجياً من كل مجموعة متطابقة التسمية، والقاعدة التي يستعملها درجة من جزأين، نقطة لكل علامة قِدَم:
| الرمز | فيه حرف كبير | فيه شرطة سفلية | الدرجة |
|---|---|---|---|
skipped-stitch | لا | لا | 0 |
poplin | لا | لا | 0 |
Poplin | نعم | لا | 1 |
skipped_stitch | لا | نعم | 1 |
Skipped_Stitch | نعم | نعم | 2 |
الدرجة الأدنى تفوز، وحيث تتعادل اثنتان يفوز الصفّ الأقدم. ثم يُعاد توجيه كل سجلّ يشير إلى خاسر، ويُؤرشف الخاسر ولا يُحذف.
وتفصيلان في ذلك الإصلاح هما مضمون الدرس التالي حقاً. فالموديلات تخزّن قيمة صنف أو قماش قد تكون الرمز أو التسمية، فكان على الإصلاح أن يطابق الاثنين. وسجلّات العيوب تخزّن التسمية لا الرمز، فالإصلاح لا يعيد كتابة واحدة منها رمزاً عن قصد.
المفردات ليست قائمة طعام. بل مجموعة مفاتيح تمسك بها جداول أخرى.
اختبر فهمكيحتاج الميرشانديزر نوع قماش اسمه Ripstop، فيكتبه في الخانة داخل النموذج، فيُرفض برسالة تسمّي مسؤولاً. ماذا حدث فعلاً، ولماذا الرفض أفضل من الإنشاء؟أظهر الإجابة
توجد قيمة مؤرشفة تحمل ذلك الاسم أصلاً. فالباب الداخلي يعيد استعمال التطابق الفعّال في صمت ويرفض المؤرشف، لأن أحداً تعمّد تقاعده والنموذج ليس مكان الرجوع عن ذلك القرار. وإنشاء Ripstop ثانٍ سيعطي المفردات صفّين باسم واحد، وهو المكرّر نفسه الذي اضطرّ التطبيق لإصلاحه مرة، وسينقض في صمت قرار حوكمة. والمالك يستطيع استعادة الأصلي في الإعدادات، وهذا يُبقي كل سجلّ يشير إليه صالحاً.
موجّه · راجع قوائمي المنسدلة قبل أن تصير غير قابلة للاستعمال
مرة كل موسم، وقبل أن يعيد أحد تسمية قيمة تشير إلماذاا سجلّات قائمة.
ساعدني في إبقاء قوائمي المرجعية صغيرة وقابلة لإعادة الاستعمال وآمنة التغيير. سأصدّر أو ألصق: قائمة مرجعية واحدة بكل قيمة ورمزها وتسميتها، مع تحهذهد المؤرشف منها؛ وعدد السجلّات التي تشير إلى كل قيمة حالياً؛ وإن أمكنني، كم مرة كتب الناس قيمة جهذهدة تماماً في تلك القائمة خلال الموسم الماضي مقابل عدد القيم الجهذهدة التي كسبتها القائمة فعلاً. أولاً، نسبة إعادة الاستعمال. اقسم المحاولات على القيم الجهذهدة الحقيقية. قل لي الرقم وقل لي ماذا يعني: قريباً من واحد فمفرداتي تُخترع لا تُعاد، وأعلى من واحد بوضوح فالبحث قبل الإنشاء يؤهذه عمله. ثانياً، شبه المكرّرات. اجمع القيم التي تختلف تسمياتها بحالة الأحرف أو المسافات أو الترقيم أو خطأ إملائي واضح فقط. ولكل مجموعة، قل لي أيّها المدخل المعتمد ولماذا، واعدد السجلّات التي تشير إلى كل واحدة. ولا تقترح حذف أي منها أبداً — فالحركة الآمنة هي إعادة توجيه السجلّات وأرشفة الخاسرة. ثالثاً، وهذا ما يفسد عادةً: قبل أن أعيد تسمية أي شيء، اسألني ماذا يخزّنه. إن كانت السجلّات تخزّن رمز القيمة، فإعادة تسمية التسمية تجميلية. وإن كانت تخزّن التسمية، فإعادة التسمية تشطر تاريخي إلى سلسلتين لن يجمعهما أي تقرير. اجعلني أجيب عن ذلك السؤال لكل قائمة قبل أن توافق على أي إعادة تسمية، وإن لم أعرف فقل لي أن أؤرشف وأضيف بدل أن أعيد التسمية. وأخيراً، قل لي أيّ قوائمي لا ينبغي أن تكون قابلة للتحرير من الجميع أصلاً: المفردات الدولية الثابتة، وكل ما يستهلكه حساب، وكل ما يسمّي نظام امتثال حقيقياً له جهة إصدار حقيقية. وقاعدة واحدة. لا تقترح ترتيباً فائدته أن القائمة تبدو أجمل. فكل تغيير علماذا أن يسمّي التقرير أو الشاشة أو الحساب الذي يحسّنه.
قد يخطئ الذكاء الاصطناعي — تحقّق من أي شيء ستتصرّف بناءً عليه.