00:00:00لدينا إطار عمل JavaScript جديد، إطار عمل متكامل، لكن اسمعني قبل أن تغادر.
00:00:07إنه مثير للاهتمام حقاً لأنه من صناع Remix، أي الأشخاص الذين بنوا Remix JS وهما Ryan Florence و Michael Jackson.
00:00:17لا، ليس ذاك Michael Jackson.
00:00:20وهما أيضاً المطوران الأصليان لـ React Router.
00:00:24لقد شاركا رؤيتهما وفي الواقع النموذج الأولي، أو لنقل العروض التوضيحية الأولى لإطار عمل JavaScript الجديد كلياً Remix الإصدار 3.
00:00:36إذاً ليس اسماً جديداً حقاً، بل هو اسم موجود، لكنه إطار عمل جديد تماماً.
00:00:43وفي هذا الفيديو سأحاول أن أوضح كل ذلك.
00:00:47سأشرح ماهيته وبالطبع رأيي فيه، وهل نحتاج فعلاً إلى إطار عمل JavaScript آخر، وما أعتقد أن فرص نجاحه أو تبنيه ستكون في عصر تُنتج فيه نماذج اللغة الكبيرة تطبيقات React افتراضياً.
00:01:04لكن دعونا نصل إلى هناك خطوة بخطوة، ما هو Remix بالضبط ولماذا هو مهم؟
00:01:11Remix في حال فاتك الأمر هو إطار عمل React فوقي، بديل لـ Next.js في النهاية.
00:01:18وقد تم إطلاق Remix قبل بضع سنوات بالفعل.
00:01:22تم إصدار Remix الإصدار 2 في عام 2022 إن لم أكن مخطئاً تماماً، وبعدها في 2024 تم دمج Remix الإصدار 2 بشكل أساسي مع React Router.
00:01:33لهذا السبب الآن عند استخدام React Router، يمكنك إما استخدامه كمكتبة توجيه في تطبيقات React كما فعلت دائماً، وهذا لا يزال يعمل وهو لا يزال مكتبة رائعة لذلك، لكن يمكنك أيضاً استخدامه في وضع الإطار لإنشاء تطبيق React متكامل حيث يكون React Router أكثر من مجرد موجه، حيث يساعد أيضاً في جلب البيانات وتحميل البيانات وتحويلات البيانات تماماً مثل Remix لأنه هو Remix مدمج في React Router.
00:02:09لكن هذا بالطبع أثار السؤال: ماذا سيحدث لـ Remix إذاً، للعلامة التجارية Remix؟.
00:02:17واتضح أنه سيصبح إطار عمل جديد مع الإصدار 3.
00:02:21سيصبح إطار عمل جديد والمهم أنه مستقل عن React.
00:02:26ليس إطار عمل React فوقي.
00:02:28ليس بديلاً آخر لـ Next.js إن صح التعبير.
00:02:32بل هو إطار عمل JavaScript متكامل جديد تماماً مكتوب من الصفر، من الألف إلى الياء، بجميع الميزات وواجهة البرمجة التي يرغب Ryan Florence و Michael Jackson في امتلاكها في إطار عمل JavaScript جديد.
00:02:50إذاً في الأساس حل المشاكل التي يرونها ورأوها في نظام JavaScript البيئي، في المشهد الحالي للمكتبات وأطر العمل إن صح التعبير، وبالتحديد بالطبع مع React لأنه المكتبة وإطار العمل الرئيسي، حسب كيفية تسميتك له، الذي لدينا هناك.
00:03:12إذاً ما هو هذا Remix الجديد؟ حسناً، يوم الجمعة الماضي.
00:03:18تمكنا من الحصول على عرض توضيحي أول، لمحة أولى عن واجهة البرمجة.
00:03:22وسأضع رابط البث المباشر الكامل حيث يمكنك مشاهدة فعالية الإعلان بأكملها أسفل هذا الفيديو بالطبع في حال أردت الاطلاع على كل شيء.
00:03:31لكن كن على دراية بأنه سيكون حوالي أربع ساعات من العرض التوضيحي والشرح المتواصل.
00:03:37لقد شاهدتها حتى لا تضطر أنت إلى ذلك إن لم ترد، لكن بالتأكيد ألقِ نظرة إذا أردت معرفة المزيد.
00:03:44وهنا ترى أحد الأشياء الرئيسية التي سيدور حولها إطار العمل الجديد هذا
00:03:49أو لنقل الشيء الرئيسي الذي أحدث بعض الضجة على X، هذا this.update.
00:03:56لا يبدو مذهلاً جداً، أليس كذلك؟ حسناً، إنه في الواقع يشير إلى شيئين.
00:04:04لم يعد مطورو JavaScript معتادين عليهما حقاً.
00:04:07أولاً، استخدام الكلمة المفتاحية this.
00:04:10أعني الأشخاص القدامى مثلي تعلمنا كل الخصائص والميزات الخاصة بـ this عندما بدأنا مع JavaScript.
00:04:18في هذه الأيام لا تستخدمها كثيراً.
00:04:20في React لن تكتب this على الأرجح أبداً.
00:04:23لكنها كلمة مفتاحية مدمجة في JavaScript.
00:04:26إنهم يستفيدون من هذه الكلمة المفتاحية this لعرض بعض واجهات البرمجة لك.
00:04:32من أين تحصل على الوصول إلى تلك واجهات البرمجة؟ حسناً، ما زلت تكتب دوال functions..
00:04:39إذاً أنت لا تكتب classes حتى لو ظننت أنك تفعل ذلك مع الكلمة المفتاحية this.
00:04:44لكن عند العمل مع Remix ما زلت تبني مكونات components، وستظل تستخدم دوال functions لذلك.
00:04:51تماماً كما تعرف من React، لكن تلك دوال المكونات ستبدو مختلفة قليلاً.
00:04:56لكن دعنا نعود إلى this.update.
00:04:58ذكرت أن هناك شيئين مهمين حول ذلك.
00:05:00this هو أحدهما.
00:05:02Update هو الآخر لأنه في Remix الإصدار 3، سيتعين عليك إخبار إطار العمل متى يجب أن يحدث الشاشة، متى يجب أن يعيد العرض.
00:05:10وهذا بالطبع شيء لم نعد معتادين عليه.
00:05:13لأنه في React ولكن أيضاً في Vue و Angular أنت تعتمد على إطار العمل في تحديد متى يتم التحديث لك.
00:05:20في React عندما تستدعي setState أنت تخصص قيمة جديدة للحالة state التي تديرها وهذا سيؤدي أيضاً إلى تحديث واجهة المستخدم.
00:05:29لكن ليس بالضرورة فوراً، بل ستقوم React ببعض التجميع batching وستجمع تحديثات حالة متعددة محتملة وهكذا، لكن في النهاية ستحدّث واجهة المستخدم.
00:05:39إذاً مع setState أنت نوعاً ما تخبر React أنها يجب أن تحدث واجهة المستخدم، لكنك في الغالب تخبرها أن بعض القيم تتغير وأن من آثار ذلك أن واجهة المستخدم ستُحدَّث وستُعاد عرضها.
00:05:52مع Remix الأمر مختلف.
00:05:54مع الإصدار 3 من Remix يجب أن أقول، هناك ستدير حالتك state في متغيرات عادية، لا شيء خاص.
00:06:00لا يوجد خطاف hook useState أو أي شيء من هذا القبيل، لا توجد خطافات على الإطلاق في الواقع، وأنت فقط تستدعي this.update كلما علمت أن واجهة المستخدم يجب أن تُحدَّث.
00:06:12إذاً يمكنك تغيير مجموعة من المتغيرات وعدم استدعاء this.update وواجهة المستخدم لن تُحدَّث.
00:06:19أو تغيّر مجموعة من المتغيرات وتستدعي this.update وواجهة المستخدم ستُحدَّث.
00:06:24هذه هي طريقة العمل، ويبدو أن بعض الأشخاص، أنت تعرف الإنترنت جيداً، الأشخاص على الإنترنت فظيعون، بعض الأشخاص لديهم بعض المشاكل مع ذلك.
00:06:34أقول دعونا نرى كيف يعمل.
00:06:36أعني إنه نهج جديد والنهج القديم بالتأكيد يعمل بشكل جيد.
00:06:40أعتقد أن هناك سبباً لاستخدامه في كل تلك المكتبات وأطر العمل، لكن النهج القديم بالتأكيد لديه أيضاً إمكانية أن يكون مصيدة foot gun يمكن أن تؤدي إلى مواقف لا يكون فيها واضحاً حقاً لماذا شيء ما يُحدَّث أو لا يُحدَّث، وفي التطبيقات الأكثر تعقيداً وخاصة مع الإصدارات الأحدث من React التي أصبحت معقدة جداً مع الكثير من الخطافات hooks وغيرها، يمكن أن يكون مربكاً أن تفهم حقاً ما يحدث.
00:07:08وهذا أحد الأسباب التي تجعلهم يعودون إلى واجهة برمجة أبسط حيث لديك السيطرة الكاملة..
00:07:16كما أنهم يستخدمون الكلمة المفتاحية this لإتاحة بعض واجهات البرمجة الأخرى لك، لكن ليس الكثير في الواقع لأن الفكرة واضحة وهي الحفاظ على بساطة الإطار وتركيزه ومنحك تجربة مطور جيدة وجعل استخدام هذا الإطار سهلاً أيضاً.
00:07:33لأن هناك هدفاً واضحاً وقد ذكروا ذلك في منشور مدونة شاركوه في وقت سابق من هذا العام، هدف واضح لهذا الإطار وهو أنه يجب أن يكون سهل الاستخدام من قبل نماذج اللغة الكبيرة.
00:07:46لذا الفكرة بوضوح هي أن تكون قادراً على تغذية مقالات التوثيق أو الأمثلة في سجل المحادثة الخاص بك مع نموذج لغة كبير وتقديم بعض المعلومات كسياق ثم جعل نماذج اللغة الكبيرة ومساعدي البرمجة يساعدونك في توليد الكود، لأنهم بالطبع يحتاجون للقيام بذلك كونه إطار عمل جديد تماماً.
00:08:07لذا من الواضح أن أياً من نماذج اللغة الكبيرة الموجودة لم يتم تدريبها على قاعدة الكود هذه وفي المستقبل القريب لن يتم تدريبها عليها لأن 80% من جميع أمثلة كود الواجهة الأمامية هي React كما يبدو، وتحديداً React مع Shadcn.
00:08:24لذا بالطبع يحتاجون إلى إيجاد طريقة أخرى للسماح للمطورين بجعل نموذج اللغة الكبير على دراية بكيفية كتابة كود Remix v3، وهذا سبب آخر لإبقاء الذكاء الاصطناعي بسيطاً كما أتصور ولماذا يريدون إبقاءه تعبيرياً وسهل الفهم وسهل الاستخدام، لأنه ليس البشر فقط من يجب أن يستخدمه، بل أيضاً النماذج - نماذج اللغة الكبيرة.
00:08:48لذا هذا بوضوح أحد الأهداف التي كانت لديهم، ويمكنك رؤية ذلك في الأمثلة التي شاركوها.
00:08:55بالإضافة إلى ذلك، هدف آخر لديهم وقد ذكروا ذلك عدة مرات في تلك الجلسة الرئيسية وفي ذلك العرض التقديمي، وهو أنهم يستخدمون أساسيات الويب.
00:09:06إنهم يستخدمون ميزات متاحة في المتصفحات الحديثة وليس فقط المتصفحات بل أيضاً على الواجهة الخلفية وسأصل إلى الواجهة الخلفية خلال ثوانٍ.
00:09:16لكنهم يستخدمون أشياء مدمجة في المتصفح.
00:09:19إنهم يعتمدون بشكل كبير على الأحداث الأصلية والقدرات المدمجة لإرسال أحداث مخصصة.
00:09:25لذا يمكنك إنشاء أحداث مخصصة في المتصفح وإرسالها وهم يعتمدون على ذلك بشكل كبير، كما يعتمدون على إشارات الإيقاف لإيصال أن مكوناً ما تم إلغاء تحميله على سبيل المثال وللسماح لك بإيقاف مستمعي الأحداث تلقائياً.
00:09:41لذا هم يستخدمون ما هو مدمج في المتصفح لأنني بالتأكيد أشعر أننا كمطوري ويب لم نواكب ما يمكن للمتصفحات الحديثة القيام به وليس فقط المتصفحات الحديثة، هناك قدرات معينة كانت موجودة منذ سنوات ولا نستخدمها.
00:09:57قد لا نعرف حتى عنها إذا غصت حقاً في ما يقدمه DOM وما تقدمه المتصفحات وأي واجهات برمجة متاحة هناك.
00:10:05هناك الكثير يمكنك القيام به هناك والكثير من الأشياء التي قد لا تحتاج فيها إلى مكتبات طرف ثالث إضافية وهذا في النهاية ما يحاولون الاستفادة منه.
00:10:16أبقِه بسيطاً واستخدم تلك القدرات المدمجة، هذا هو نهجهم هنا في النهاية.
00:10:21الآن كما قلت، لا يزال إطار عمل رغم ذلك.
00:10:25لن تنشئ عقد DOM باستخدام createElement وجميع واجهات برمجة DOM تلك.
00:10:30بدلاً من ذلك كما ذكرت سابقاً، ستستمر في إنشاء المكونات من خلال إنشاء دوال واستخدام كود JSX فيها.
00:10:37لقد أظهروا كل ذلك.
00:10:39الأمر فقط أن إدارة الحالة تعمل بشكل مختلف تماماً وأنها بشكل عام أبسط وأنك لن يكون لديك خطافات أو أي شيء من هذا القبيل، أيضاً لأن دوال المكونات تلك لن يتم استدعاؤها مراراً وتكراراً كما هو الحال في React.
00:10:55بدلاً من ذلك سيكون لديك نوعان من الدوال واعتماداً على كيفية كتابتها سيتم استدعاؤها إما مرة واحدة فقط أو قد يتم استدعاء جزء منها عدة مرات.
00:11:06وهنا شيء للأشخاص الذين ربما عملوا مع React في 2017 أو ربما حتى قبل ذلك، قد تتذكر أننا كان لدينا نوعان من المكونات.
00:11:15كان لدينا مكونات قائمة على الفئات وذات حالة يمكنها إدارة الحالة ويمكنها التحديث عندما تتغير تلك الحالة، وكان لدينا مكونات عديمة الحالة وهي كانت دوال المكونات آنذاك.
00:11:28ثم جاءت خطافات React وأصبحت جميع المكونات دوال مكونات في النهاية ويمكن أن تكون إما ذات حالة أو عديمة الحالة.
00:11:36Remix الإصدار 3 يأخذ ذلك النهج القديم لـ React إن صح التعبير، لكن ليس مع الفئات أو الدوال، بل دائماً دوال ولكن أنواع مختلفة من الدوال.
00:11:47إذا كان لديك دالة تُرجع JSX، فهي مكون عديم الحالة في النهاية.
00:11:51لا يمكنك استدعاء this.update فيها وتتوقع أن يتم تنفيذ دالة المكون مرة أخرى.
00:11:57هذه ليست الطريقة التي ستعمل بها.
00:12:00يمكنك قبول props وإذا أعاد المكون الأب التصيير فسيتم تنفيذ دالة مكونك مرة أخرى وهكذا.
00:12:07لكن لا يمكنك إدارة الحالة فيها.
00:12:09تحول دالة المكون إلى دالة مكون ذات حالة إن صح التعبير من خلال عدم إرجاع كود JSX، بل بدلاً من ذلك بإرجاع دالة تُرجع كود JSX.
00:12:19لذا دالة مكون تحتوي على وتُرجع دالة تُرجع بعد ذلك كود JSX الذي سيكون أو يمكن أن يكون بعد ذلك مكوناً ذا حالة.
00:12:27وهناك عندما تستدعي this.update سيتم تنفيذ تلك الدالة التي أرجعتها مرة أخرى، على الأقل هذا ما فهمته.
00:12:35لذا لدينا أنواع مكونات مختلفة، لكن مرة أخرى واجهة برمجة بسيطة جداً في النهاية وطريقة بسيطة جداً للتمييز بين دوال المكونات ذات الحالة أو عديمة الحالة.
00:12:47وبعد ذلك هناك الواجهة الخلفية لأن Remix الإصدار 3 ليس مجرد إطار عمل للواجهة الأمامية، بل هو إطار عمل كامل المكدس.
00:12:56إنه مقصود أن يكون إطار عمل كامل المكدس.
00:12:59لكن بالمناسبة، سيقومون أيضاً بشحن مكتبة مكونات تجعل من الأبسط بناء مكونات نماذج معقدة وما إلى ذلك.
00:13:07يجب أن أذكر هذا أيضاً، لكن للعودة إلى الواجهة الخلفية، ستأتي أيضاً مع جزء للواجهة الخلفية.
00:13:14يهدف إلى أن يكون إطار عمل كامل المكدس للواجهة الأمامية والخلفية معاً.
00:13:19مرة أخرى بدون React تماماً، بدلاً من ذلك إنهم يعيدون بناء كل شيء من الصفر إن صح التعبير.
00:13:26لكن في الواجهة الخلفية ستحصل على موجه، موجه قوي وقادر جداً لأنه بوضوح بما أنهم بنوا React Router على مدى الـ 10 سنوات الماضية، فهم يعرفون الكثير عن التوجيه.
00:13:39لذا ستحصل على موجه قوي وتحصل على القدرات لإرجاع كود JSX ومكونات Remix في مساراتك وترطيب تلك المكونات على الخادم.
00:13:47إنهم يأتون ببديلهم الخاص لمكونات خادم React، بديل أبسط يسمح لك بإرجاع مكون يمكن تحديثه بعد تقديمه على العميل من خلال إعادة جلب أجزاء من DOM.
00:13:59لذا عندما تحذف شيئاً ما على سبيل المثال، يمكنك إرسال طلب من العميل إلى ذلك الخادم والحصول على بعض كود HTML الذي يمكن ترطيبه مرة أخرى لتحديث أجزاء من DOM.
00:14:11لذا هم يعطوننا كل هذه الميزات لبناء تطبيقات كاملة المكدس حديثة سريعة تشبه صفحة واحدة تماماً كما يمكنك مع Next.js أو وضع إطار عمل React Router أو أطر عمل أخرى مثل TanStack Start، لكن بشكل أبسط، هذا هو الهدف الواضح - الحصول على طريقة بسيطة لبناء تلك التطبيقات.
00:14:31هذا ما يريدون القيام به.
00:14:33هناك المزيد في هذا العرض التقديمي، إنه طويل لكن هذا نوعاً ما الجزء الأهم كما أقول، هذا هو استنتاجي الرئيسي.
00:14:41إنهم يريدون أن يعطونا إطار عمل كامل المكدس قوي وبسيط.
00:14:46إنهم يكتبونه من الصفر، لدينا تحديث يدوي وما إلى ذلك.
00:14:50لذا كل ما وصفته، هل نحتاج ذلك؟.
00:14:56هذا هو السؤال الكبير، وأعتقد أن هناك سؤالاً كبيراً آخر: هل سينجح؟
00:15:02من الواضح أن كلا السؤالين صعب الإجابة عليه إلى حد ما، لكنني سأبذل قصارى جهدي.
00:15:07هل نحتاج ذلك؟
00:15:08حسناً، أعتقد أن لدينا الكثير من أطر عمل JavaScript هناك ومن الواضح أن هناك العديد من الأشخاص الذين سيقولون أن لدينا الكثير منها، لذا الجواب حينها هو لا.
00:15:20لطالما اعتقدت حتى في عام 2018 عندما كان لدينا إطار عمل جديد كل أسبوع، حتى في ذلك الوقت كنت أعتقد أنه من الجيد دائماً أن يكون لديك ابتكار وتجربة أفكار جديدة.
00:15:32لا أعتقد أننا بحاجة إلى إطار عمل جديد يشبه React فقط مع بعض الاختلافات الصغيرة، لا أعتقد أننا بحاجة لذلك، لكن نهجاً جديداً تماماً مع ذلك التحديث اليدوي المُفَعّل يدوياً وجميع الأشياء الصغيرة الأخرى التي لديهم، أعتقد أن ذلك فكرة رائعة.
00:15:50إنه بالتأكيد يستحق المحاولة، يبدو مثيراً للاهتمام.
00:15:54قد يمنحنا بديلاً أبسط لـ React الذي هو رائع، لكنه أصبح معقداً للغاية على مر السنين.
00:16:01لذا نعم، قد نحتاج ذلك.
00:16:02هل سينجح؟
00:16:04هذا سؤال آخر بالطبع، خاصة الآن في عصر الذكاء الاصطناعي ونماذج اللغة الكبيرة.
00:16:10من الواضح أن تلك النماذج عادةً ما توصي بـ React افتراضياً.
00:16:14من ناحية أخرى، الأشخاص الذين لا يعرفون كيفية كتابة الكود بالطبع ليسوا الجمهور المستهدف بالضرورة، على الأقل ليس بشكل مباشر.
00:16:24سأعود لهذه النقطة.
00:16:25لذلك لا يهم هنا.
00:16:26الآن المطورون ذوو الخبرة مع ذلك قد يكونون مهتمين باستخدام Remix وببساطة توجيه نموذج اللغة الكبيرة بمساعدة الأمثلة الرسمية وغيرها لتوليد كود Remix، وذلك ببساطة لأنهم يريدون الحصول على قاعدة كود أبسط، لأن في النهاية كمطورين ما زلنا نتعامل مع الكود الخاص بنا.
00:16:46قد نولد أجزاء كبيرة منه، لكننا ما زلنا نتحكم في نموذج اللغة الكبيرة.
00:16:51ما زلنا نعدل أجزاء من الكود.
00:16:54قد نكتب أجزاء أكبر من هذا الكود إذا كانت لدينا ميزة محددة جداً في ذهننا لا يستطيع الذكاء الاصطناعي أن يفهمها بشكل صحيح.
00:17:03لذلك من الواضح أننا ما زلنا نهتم بالتقنيات المستخدمة كمطورين، أنا على الأقل ما زلت أهتم وأنا متأكد من أن بعضكم يهتم أيضاً.
00:17:12لذلك قد يكون من المثير للاهتمام تجربة شيء آخر، وطالما أن هذا الإطار سهل الاستخدام مع نماذج اللغة الكبيرة، وهناك موارد كافية لتعليم نموذج اللغة الكبيرة كيفية استخدامه، وهو بالطبع شيء يبدو أنهم يركزون عليه ولديهم كأولوية، فهذا يبدو جيداً بالنسبة لي.
00:17:31لذلك قد يمنحهم هذا بالتأكيد فرصة صالحة للنجاح.
00:17:35من الواضح أن الأمر سيكون صعباً.
00:17:37لكن مهلاً، كانت هذه ستكون الحالة دائماً، أعتقد.
00:17:41لذا أرى فرصاً ولكن بالطبع، إنه سوق مزدحم لنقل الأمر بهذا الشكل.
00:17:46الآن ما هو المهم؟ هو أن Remix ينتمي إلى Shopify منذ عام 2022..
00:17:52استحوذت Shopify على Remix يمكنك القول، لذا فريق Remix أصبح جزءاً من Shopify.
00:17:59الآن Shopify من الواضح بالطبع مهتمة بامتلاك إطار عمل يتم صيانته بنشاط ويتم استخدامه على الأقل داخل Shopify، وبذلك لا أعني فقط داخل الشركة لصفحات التسويق والعلامة التجارية الخاصة بـ Shopify.
00:18:16أعني بالنسبة لمتاجر Shopify، من الممكن بالتأكيد أن يكون الهدف هو جعل Remix خياراً لبائعي Shopify الذين يريدون بناء متاجرهم الخاصة على Shopify، والذين يريدون طريقة سهلة لتعديل تلك المتاجر وبناء واجهات متاجر مخصصة أو صفحات تشكل المتجر بشكل عام، وبالطبع امتلاك إطار عمل سهل الاستخدام وسهل الاستخدام مع نماذج اللغة الكبيرة يمكن أن يكون ضخماً.
00:18:46ما زال ليس ضماناً بالطبع، لكن وجود Shopify وراء Remix بالطبع يستحق الكثير، كما أعتقد، ولذلك أنا متفائل جداً بشأن مستقبل Remix، وبالطبع أيضاً لأن لديهم مجتمعاً ربما صغيراً لكنه متحمس جداً حسبما أستطيع أن أقول، لديهم سجل رائع، من الواضح أنهم طوروا React Router وما إلى ذلك.
00:19:10لذا نعم، أنا متحمس جداً لرؤية ما سنحصل عليه، أنا متحمس لاستخدامه بنفسي أخيراً لأن الآن هذا غير ممكن حقاً، وهذه هي أفكاري حول هذا الموضوع.
00:19:23لذا كالعادة أخبروني بأفكاركم إذا كنتم تعتقدون أننا بحاجة إليه وإذا كانوا سينجحون، وشاهدوا الجزء الكامل من المؤتمر الذي استمر أربع ساعات إذا كنتم مهتمين وتريدون معرفة المزيد..