خان المُبرمجين (علي فاضل)
538 subscribers
91 photos
9 videos
115 links
قناة أنشر فيها ما أتعلمه خلال عملي على مشاريعي الخاصة 👀
Download Telegram
من مشاكل النماذج اللغوية في البرمجة هي مشكلة وهم الكمال (تسمية مُنمّقة 😂).

مثلا، تطلب من النموذج تعديل دالة معينة لتغيير شكل القيمة الخارجة منها، فيبدأ النموذج بـ"التفكير" خارج نطاق المطلوب و"يخطط" للتعديلات المطلوبة في المواضع التي تُستخدم فيها هذه الدالة.

هذا الأمر يشتت النموذج أحيانا ويُنتج تعديلات كثيرة قد لا تحتاجها أثناء تجربتك للفكرة التي طلبتها منه.

لذلك أصبحت دقيقا جدا في صياغة طلباتي وفي كل مرة أخبره "لا تهتم باستخدامات هذه الدالة، سأعدلها لاحقا بنفسي".
6👍1
كنت أشرح Hotwire (وهو الـ Frontend Stack الخاص بـ Ruby on Rails) خلال جلسة لمشاركة المعرفة في MilkStraw AI واكتشفنا أن منصتنا تُعيد تحميل الصفحة بالكامل عند التنقّل بين الصفحات!

وقبل أن تقول أن هذا هو الطبيعي، فيا صديقي Turbo (وهي جزء من Hotwire) تضمن لك تحميل الصفحة مرة واحدة، ثم مع كل تنقّل لصفحة جديدة تقوم Turbo بتغيير الـ Body الخاص بالصفحة فقط ولا تُعيد تحميل كل مكونات الصفحة من CSS و JS وغيرها.

في أي مشروع يستخدم Ruby on Rails، التنقّل بين الصفحات يتم من خلال طلب أو Request من نوع Fetch من خلال JS ولا نستخدم (في غالب الأحيان) أي طلبات من نوع Document، كما هو موضّح في الصورة.

الطلبات من نوع Fetch لا تُعيد تحميل الصفحة ومكوناتها بالكامل، أما الطلبات من نوع Document فهي تُعيد تحميل كامل مكونات الصفحة، وهذا هو الفرق الأساسي.

لم نهتم لإيجاد الحل خلال جلسة مشاركة المعرفة لأننا وجدنا المشكلة في أول 5 دقائق منها وكان هناك الكثير من الأشياء لشرحها.

قبل النوم، فتحت تطبيق GitHub على الهاتف وسألت Copilot عن المشكلة، وكان جوابه سيئًا وغير مفيد، لكنه كان ملهما 😂

بعد قراءة الجواب، فتحت ملف head.rb وهو المكوّن الخاص برأس الصفحة (HTML head) وقرأته، لأجد السطر التالي:

raw(cloudflare_turnstile_script_tag)


نستخدم في MilkStraw AI خدمة Cloudflare Turnstile، وهذا السطر يُضيف الـ Script الخاص بالخدمة إلى رأس الصفحة، ولكن خلال عملي على مشروع الجامع سبَّبَ لي هذا السطر مشكلة من نفس النوع، إعادة تحميل كاملة للصفحة!

ذهبت إلى ملف head.rb في مشروع الجامع لأجد أنني أزلت السطر السابق واستبدلته بشيفرة برمجية أخرى تجدونها في هذا الرابط:
https://github.com/ieasybooks/aljam3-web-app/blob/main/app/components/head.rb#L73-L78

وكان السبب:

Renders the below script tag with 
data_turbo_temporary: true
, which causes full page reloads.


أي أن استخدام cloudflare_turnstile_script_tag كان فعلا يسبب إعادة تحميل كاملة للصفحة في الجامع بسبب استخدام data_turbo_temporary: true.

أضفت نفس التعديل إلى MilkStraw AI (وكان طلب التعديل رقمه 1,000 على GitHub 🎉) ونشرنا النسخة الجديدة من المنصة وحُلَّت المشكلة 🚀

كانت المشكلة تتعلّق بكيفية عمل ميزتين من ميزات Turbo:
- data-turbo-temporary
- data-turbo-track

يمكن أن تقرأ عنهم أكثر من هذه الصفحة:
https://turbo.hotwired.dev/reference/attributes

والسلام عليكم 👋🏻
6👍3
لا أنشر خارج نطاق التقنية غالبا، ولكن السيد عمر يُبدع 😎✌🏻

https://youtu.be/IflzCK3JB2Q
10
عند انضمامي إلى MilkStraw AI، كانت الشركة تعتمد على خدمة مكتوبة باستخدام FastAPI لجمع البيانات الأساسية والمطلوبة لخدمة العملاء من مقدِّمي الخدمات مثل AWS.

بجانب هذه الخدمة، يوجد تطبيق Ruby on Rails يستهلك البيانات من خدمة FastAPI لعرضها، بالإضافة لإدارة المستخدمين ولوحات التحكم والمدفوعات وغيرها.

اليوم، ولله الحمد، انتهينا من نقل كل الشيفرة البرمجية من خدمة FastAPI إلى تطبيق Ruby on Rails 🎉

النتائج:
- شيفرة مصدرية واحدة ومسار نشر (Deployment Pipeline) واحد
- تحسين تجربة المطورين بناء على ردود فعل الفريق
- تقليل التكاليف التشغيلية بنسبة 75%
- تحسين الأداء بنسبة تتجاوز 300%

قد ننشر مقالاً تقنياً مفصلاً بأرقام دقيقة قريباً، سأشاركه هنا عند نشره إن شاء الله 🤓
🔥144