كيف استغنينا عن SSH واستبدلناه بـ AWS SSM لبنية تحتية أكثر أمانًا وتوافقية مع SOC2؟
تحدثنا في هذه المقالة عن كيفية تخصيص Kamal - الأداة التي نستخدمها لنشر منصة MilkStraw AI وخدماتها المختلفة - لاستبدال SSH بـ AWS SSM خطوة بخطوة.
لماذا قمنا بهذه النقلة؟
🔒 وصول أكثر أمانًا للخوادم دون الحاجة لمنفذ 22
🔑 إدارة مركزية للصلاحيات من خلال AWS IAM
📝 سجل كامل بعمليات الدخول والأوامر المستخدمة في كل جلسة
✅ توافقية كاملة مع متطلبات إطار SOC2
🚀 تبسيط للبنية التحتية، فلا حاجة لاستخدام VPN أو Bastion Hosts
رابط المقال:
https://www.milkstraw.ai/blog/kamal-ssm-deploy-ec2
*هذا المنشور لم يُكتب بواسطة الذكاء الاصطناعي*
تحدثنا في هذه المقالة عن كيفية تخصيص Kamal - الأداة التي نستخدمها لنشر منصة MilkStraw AI وخدماتها المختلفة - لاستبدال SSH بـ AWS SSM خطوة بخطوة.
لماذا قمنا بهذه النقلة؟
🔒 وصول أكثر أمانًا للخوادم دون الحاجة لمنفذ 22
🔑 إدارة مركزية للصلاحيات من خلال AWS IAM
📝 سجل كامل بعمليات الدخول والأوامر المستخدمة في كل جلسة
✅ توافقية كاملة مع متطلبات إطار SOC2
🚀 تبسيط للبنية التحتية، فلا حاجة لاستخدام VPN أو Bastion Hosts
رابط المقال:
https://www.milkstraw.ai/blog/kamal-ssm-deploy-ec2
*هذا المنشور لم يُكتب بواسطة الذكاء الاصطناعي*
❤1🔥1
لا داعي لاستخدام اعتماديات لا حاجة لها 🤓
أعمل على أحد المشاريع في MilkStraw AI، واحتجت إلى قراءة ملف YAML (نُحب YAML 😌). طلبت من Claude Code (كما يفعل الجميع) إضافة هذه الميزة سريعًا لتجربتها فوجدته كتب دالة باسم parseSimpleYaml تقرأ صيغةً مُبسَّطةً من ملفًّات YAML تدعم القيَم البسيطة فقط، كهذه:
name: Ali Fadel
company: MilkStraw AI
أعجبتني الفكرة، لأن ما يفعله كثير من المبرمجين تلقائيًّا هو اللجوء إلى اعتماديات جاهزة لتنفيذ هذه المهام، بينما قد تكفي أحيانًا دالة صغيرة وواضحة كالتي في الصورة، فتؤدي الغرض وتجنبك إضافة اعتمادية جديدة لا تحتاجها.
أعمل على أحد المشاريع في MilkStraw AI، واحتجت إلى قراءة ملف YAML (نُحب YAML 😌). طلبت من Claude Code (كما يفعل الجميع) إضافة هذه الميزة سريعًا لتجربتها فوجدته كتب دالة باسم parseSimpleYaml تقرأ صيغةً مُبسَّطةً من ملفًّات YAML تدعم القيَم البسيطة فقط، كهذه:
name: Ali Fadel
company: MilkStraw AI
أعجبتني الفكرة، لأن ما يفعله كثير من المبرمجين تلقائيًّا هو اللجوء إلى اعتماديات جاهزة لتنفيذ هذه المهام، بينما قد تكفي أحيانًا دالة صغيرة وواضحة كالتي في الصورة، فتؤدي الغرض وتجنبك إضافة اعتمادية جديدة لا تحتاجها.
❤3
خان المُبرمجين (علي فاضل)
Photo
حينما يُصبح البحث العلمي غير علمي 😪
بدأت العمل خلال الأسابيع الماضية على فكرة بحثية في مجال تشكيل النصوص العربية مع صديقي Ibraheem Tuffaha 🥛 حيث أن مشروع تخرجنا كان في نفس هذا المجال ولله الحمد حققنا فيه نتائج ممتازة سنة 2019.
الفكرة قديمة متجددة ولكن لم نجد الفرصة لتطبيقها، فبدأت العمل عليها بداية شهر رمضان، ولله الحمد النتائج ممتازة من أول تجربة ولا تزال في تحسُّن.
عندما وجدت النتائج جيدة وقابلة للنشر، بدأت البحث عن آخر الأبحاث في المجال لمعرفة آخر ما توصل إليه "العلم" وما حققه "الباحثون" من نتائج على بيانات الاختبار الموجودة، وهنا وجدت المشكلة.
أرقام ينشرها أصحابها فقط ليقولوا "حققنا أفضل نتائج في مجال س ولم يسبقنا لذلك أحد.."
ذكر أحد أكثر الباحثين اهتمامًا بمجال التشكيل في اللغة العربية في مقدمة ورقة بحثية له أنه حقق نتيجة س، وهي فعلا نتيجة مبهرة أُحييه عليها ووضعت نتائج تجاربنا الجديدة في ورطة.
فتحت البحث وبدأت بمراجعته مع Claude Code لأكتشف أنه وصل لـ س من خلال احتساب المسافات (Whitespaces) ومكافأة النموذج على "عدم تشكيلها"!
النتيجة الحقيقية في هذه الورقة من هذا "الباحث" كانت ص وهي أكبر من س بأكثر من 0.2% وهذا رقم لو تعلمون عظيم في مجال التشكيل.
هذا النوع من الأبحاث والباحثين - غالب الظن - هدفه وضع هذا الرقم في مقدمة البحث لجذب الانتباه، ثم يضع التفاصيل داخل الورقة، ولكن مشكلتي معه أنه يُصعِّب الأمر على من يأتي بعده بغير وجه حق.
فأنا الآن مضطر لمقارنة نتائجي الواقعية (احتساب النتيجة على الحروف العربية فقط) مع نتائجه الواقعية (ص) والعقيمة (س) وتبرير موقفي في البحث وشرح الفرق بين احتساب الحروف العربية فقط واحتساب غيرها من الحروف.
مكافئة النموذج على عدم تشكيله لمجموعة من الحروف التي يُمكن تجاوزها بجملة شرطية بسيطة (if-statement) ما هو إلا طريقة لتقليل الأخطاء وتحسين أرقام النموذج.
هذا ما ذكرناه في بحثنا سنة 2019 وسنبقى نذكره ونُذكِّر به بإذن الله، ليبقى الهدف هو خدمة هذه اللغة العظيمة وتحسين العلم، لا مجرد الأرقام والتفاخر والأوراق البحثية وعدد الاقتباسات.
والسلام عليكم 👋🏻
ملاحظة: لا أقول أن هذا الأمر مُتعلِّق بالباحثين العرب، ولا شك عندي في أنه مسلك يسلكه جزء لا بأس به من الباحثين حول العالم.
بدأت العمل خلال الأسابيع الماضية على فكرة بحثية في مجال تشكيل النصوص العربية مع صديقي Ibraheem Tuffaha 🥛 حيث أن مشروع تخرجنا كان في نفس هذا المجال ولله الحمد حققنا فيه نتائج ممتازة سنة 2019.
الفكرة قديمة متجددة ولكن لم نجد الفرصة لتطبيقها، فبدأت العمل عليها بداية شهر رمضان، ولله الحمد النتائج ممتازة من أول تجربة ولا تزال في تحسُّن.
عندما وجدت النتائج جيدة وقابلة للنشر، بدأت البحث عن آخر الأبحاث في المجال لمعرفة آخر ما توصل إليه "العلم" وما حققه "الباحثون" من نتائج على بيانات الاختبار الموجودة، وهنا وجدت المشكلة.
أرقام ينشرها أصحابها فقط ليقولوا "حققنا أفضل نتائج في مجال س ولم يسبقنا لذلك أحد.."
ذكر أحد أكثر الباحثين اهتمامًا بمجال التشكيل في اللغة العربية في مقدمة ورقة بحثية له أنه حقق نتيجة س، وهي فعلا نتيجة مبهرة أُحييه عليها ووضعت نتائج تجاربنا الجديدة في ورطة.
فتحت البحث وبدأت بمراجعته مع Claude Code لأكتشف أنه وصل لـ س من خلال احتساب المسافات (Whitespaces) ومكافأة النموذج على "عدم تشكيلها"!
النتيجة الحقيقية في هذه الورقة من هذا "الباحث" كانت ص وهي أكبر من س بأكثر من 0.2% وهذا رقم لو تعلمون عظيم في مجال التشكيل.
هذا النوع من الأبحاث والباحثين - غالب الظن - هدفه وضع هذا الرقم في مقدمة البحث لجذب الانتباه، ثم يضع التفاصيل داخل الورقة، ولكن مشكلتي معه أنه يُصعِّب الأمر على من يأتي بعده بغير وجه حق.
فأنا الآن مضطر لمقارنة نتائجي الواقعية (احتساب النتيجة على الحروف العربية فقط) مع نتائجه الواقعية (ص) والعقيمة (س) وتبرير موقفي في البحث وشرح الفرق بين احتساب الحروف العربية فقط واحتساب غيرها من الحروف.
مكافئة النموذج على عدم تشكيله لمجموعة من الحروف التي يُمكن تجاوزها بجملة شرطية بسيطة (if-statement) ما هو إلا طريقة لتقليل الأخطاء وتحسين أرقام النموذج.
هذا ما ذكرناه في بحثنا سنة 2019 وسنبقى نذكره ونُذكِّر به بإذن الله، ليبقى الهدف هو خدمة هذه اللغة العظيمة وتحسين العلم، لا مجرد الأرقام والتفاخر والأوراق البحثية وعدد الاقتباسات.
والسلام عليكم 👋🏻
ملاحظة: لا أقول أن هذا الأمر مُتعلِّق بالباحثين العرب، ولا شك عندي في أنه مسلك يسلكه جزء لا بأس به من الباحثين حول العالم.
❤7👏2
خان المُبرمجين (علي فاضل)
Photo
ملفات MD تعمل 😁
من فترة وجدت مستودعًا باسم superpowers وهو عبارة عن Claude Code plugin (يمكن استخدامه مع بقية الـ Harnesses) وهذا كان وصفه:
An agentic skills framework & software development methodology that works.
وكالعادة، مع كثرة أخبار الذكاء الاصطناعي، تجاهلته تمامًا لأن الأمر أصبح مملًّا، الكثير من المشاريع تظهر وتختفي كل يوم دون أن نعرف جدواها.
ثم ظهر لي مستودع آخر منذ أسبوعين تقريبًا باسم:
superpowers-ruby
فتوقفت ❤️
قرأت ملف README وظهر أنه Fork من مستودع superpowers مخصص للغة Ruby، فبدأت بتثبيته لتجربته، وكانت النتيجة ممتازة خلال الأسبوعين الماضيين.
المستودع الأصلي فيه الكثير من الـ Skills ولكن أكثر ما أعجبني منها هو التالي:
- brainstorming
- writing-plans
- executing-plans
- test-driven-development
- subagent-driven-development
- systematic-debugging
طريقة تفاعل Claude Code أو Codex تغيَّرت تمامًا بعد تثبيت هذه الـ Plugin بداية من بحثه في المشكلة والتخطيط لحلها وصولًا إلى تنفيذ المهام والتأكد من إنجازها.
أنصح بتجربة هذه الـ Plugin بناءً على تجربة شخصية، سواءً superpowers أو superpowers-ruby.
الروابط:
https://github.com/obra/superpowers
https://github.com/lucianghinda/superpowers-ruby
والسلام عليكم 👋🏻
من فترة وجدت مستودعًا باسم superpowers وهو عبارة عن Claude Code plugin (يمكن استخدامه مع بقية الـ Harnesses) وهذا كان وصفه:
An agentic skills framework & software development methodology that works.
وكالعادة، مع كثرة أخبار الذكاء الاصطناعي، تجاهلته تمامًا لأن الأمر أصبح مملًّا، الكثير من المشاريع تظهر وتختفي كل يوم دون أن نعرف جدواها.
ثم ظهر لي مستودع آخر منذ أسبوعين تقريبًا باسم:
superpowers-ruby
فتوقفت ❤️
قرأت ملف README وظهر أنه Fork من مستودع superpowers مخصص للغة Ruby، فبدأت بتثبيته لتجربته، وكانت النتيجة ممتازة خلال الأسبوعين الماضيين.
المستودع الأصلي فيه الكثير من الـ Skills ولكن أكثر ما أعجبني منها هو التالي:
- brainstorming
- writing-plans
- executing-plans
- test-driven-development
- subagent-driven-development
- systematic-debugging
طريقة تفاعل Claude Code أو Codex تغيَّرت تمامًا بعد تثبيت هذه الـ Plugin بداية من بحثه في المشكلة والتخطيط لحلها وصولًا إلى تنفيذ المهام والتأكد من إنجازها.
أنصح بتجربة هذه الـ Plugin بناءً على تجربة شخصية، سواءً superpowers أو superpowers-ruby.
الروابط:
https://github.com/obra/superpowers
https://github.com/lucianghinda/superpowers-ruby
والسلام عليكم 👋🏻
❤3
خان المُبرمجين (علي فاضل)
Photo
اهتمامنا بجمالية الشيفرة البرمجية قد يُفقدنا الأداء أحيانًا!
كنت أعمل البارحة على مشروع جانبي، واحتجت إلى معالجة بعض النصوص العربية، فكتبت دالة شبيهة بالتي في الصورة.
الدالة بسيطة: تستبدل الألف المهموزة أو الممدودة بألف عادية، والألف المقصورة بياء، والأرقام العربية (أو الهندية) بأرقام ASCII الإنجليزية (والخلاف حول تسمية هذه الأرقام لا ينتهي 😂).
في Ruby توجد دالة اسمها tr، وهي اختصار لكلمة translate. تستقبل سلسلتين نصيتين، ثم تستبدل كل حرف من السلسلة الأولى بالحرف المناظر له في السلسلة الثانية، داخل النص الذي تُستدعى عليه الدالة (text في مثالنا).
كتب Codex الدالة باستخدام سلسلة من الاستدعاءات المتتالية للدالة tr، بحيث يستبدل كل استدعاء جزءًا من الحروف المستهدفة.
وخلال مراجعتي للدالة، طلبت منه إجراء بعض الاختبارات للمقارنة بين سرعة تنفيذها عند استخدام سلسلة من الاستدعاءات، وبين سرعتها عند الاكتفاء باستدعاء واحد فقط يضم جميع الحروف. والمنطق يقول إنها ستكون أسرع في الحالة الثانية، وهذا ما حدث فعلًا.
كانت النتيجة أن الدالة ذات الاستدعاء الواحد أسرع بنحو الضعف من الدالة التي تستخدم سلسلة من الاستدعاءات.
قد يبدو الفرق ضئيلًا، لأنه يُقاس بالميكروثانية، لكن في الشيفرات التي تُستخدم بكثرة ومع ملايين الطلبات والمستخدمين، قد يصبح هذا الفرق مؤثرًّا.
الهدف توضيح فكرة واحدة: قد نخسر شيئًا من الأداء مقابل جمالية الشيفرة، وقد نخسر شيئًا من الجمالية مقابل الأداء، وهذا قد يكون مقبولًا بحسب السياق. لكن المهم أن يكون المبرمج واعيًا عند اتخاذ القرار.
والسلام عليكم 👋🏻
كنت أعمل البارحة على مشروع جانبي، واحتجت إلى معالجة بعض النصوص العربية، فكتبت دالة شبيهة بالتي في الصورة.
الدالة بسيطة: تستبدل الألف المهموزة أو الممدودة بألف عادية، والألف المقصورة بياء، والأرقام العربية (أو الهندية) بأرقام ASCII الإنجليزية (والخلاف حول تسمية هذه الأرقام لا ينتهي 😂).
في Ruby توجد دالة اسمها tr، وهي اختصار لكلمة translate. تستقبل سلسلتين نصيتين، ثم تستبدل كل حرف من السلسلة الأولى بالحرف المناظر له في السلسلة الثانية، داخل النص الذي تُستدعى عليه الدالة (text في مثالنا).
كتب Codex الدالة باستخدام سلسلة من الاستدعاءات المتتالية للدالة tr، بحيث يستبدل كل استدعاء جزءًا من الحروف المستهدفة.
وخلال مراجعتي للدالة، طلبت منه إجراء بعض الاختبارات للمقارنة بين سرعة تنفيذها عند استخدام سلسلة من الاستدعاءات، وبين سرعتها عند الاكتفاء باستدعاء واحد فقط يضم جميع الحروف. والمنطق يقول إنها ستكون أسرع في الحالة الثانية، وهذا ما حدث فعلًا.
كانت النتيجة أن الدالة ذات الاستدعاء الواحد أسرع بنحو الضعف من الدالة التي تستخدم سلسلة من الاستدعاءات.
قد يبدو الفرق ضئيلًا، لأنه يُقاس بالميكروثانية، لكن في الشيفرات التي تُستخدم بكثرة ومع ملايين الطلبات والمستخدمين، قد يصبح هذا الفرق مؤثرًّا.
الهدف توضيح فكرة واحدة: قد نخسر شيئًا من الأداء مقابل جمالية الشيفرة، وقد نخسر شيئًا من الجمالية مقابل الأداء، وهذا قد يكون مقبولًا بحسب السياق. لكن المهم أن يكون المبرمج واعيًا عند اتخاذ القرار.
والسلام عليكم 👋🏻
❤5👍1
This media is not supported in your browser
VIEW IN TELEGRAM
كتبت نفس البرنامج 3 مرات بـ 3 لغات مختلفة 😂 ذكرت هذا الأمر في هذا المنشور:
https://t.me/programmerskhan/269
واليوم انتهيت من المراجعة النهائية لتطبيق سطح المكتب الخاص بتحويل والمبرمج حدسيًّا (Vibe Coded) باستخدام Tauri (Rust + Vue3) لتحويل ملفات PDF والصور إلى نصوص بصيغة TXT و DOCX من خلال Google Drive OCR.
مشروع من الزمن الجميل، لا نماذج لغوية عملاقة ولا خوارزميات معقدة، مجرد API calls بسيطة باستخدام Google Drive API.
جودة التحويل ممتازة مقارنة بوقت المعالجة والموارد المطلوبة، يمكنكم تحميل نسخة البرنامج المتوافقة مع نظام تشغيلكم من هذا الرابط:
https://tahweel.ieasybooks.com
https://t.me/programmerskhan/269
واليوم انتهيت من المراجعة النهائية لتطبيق سطح المكتب الخاص بتحويل والمبرمج حدسيًّا (Vibe Coded) باستخدام Tauri (Rust + Vue3) لتحويل ملفات PDF والصور إلى نصوص بصيغة TXT و DOCX من خلال Google Drive OCR.
مشروع من الزمن الجميل، لا نماذج لغوية عملاقة ولا خوارزميات معقدة، مجرد API calls بسيطة باستخدام Google Drive API.
جودة التحويل ممتازة مقارنة بوقت المعالجة والموارد المطلوبة، يمكنكم تحميل نسخة البرنامج المتوافقة مع نظام تشغيلكم من هذا الرابط:
https://tahweel.ieasybooks.com
❤8
خان المُبرمجين (علي فاضل)
Photo
يجب أن تستخدم superpowers!
نشرت منذ ثلاثة أيام عن superpowers و superpowers-ruby واكتشفت أنني لا أستغلها بالكامل وذلك خلال إنشاء صفحة لمبادرة الكتب المُيسّرة:
https://ieasybooks.com
بدأت التخطيط مع Claude Code من خلال إعطائه تفاصيل الهوية البصرية لمبادرة الكتب المُيسّرة (الألوان والشعار والخطوط وغيرها) وكل مستودعات مشاريع المبادرة.
تفاجأت بعد أن انتهى من "التفكير" أنه أنشأ خادمًا محليًّا على localhost:59100 وأضاف إلى الصفحة الرئيسية 3 اقتراحات لشكل الصفحة الرئيسية وطلب مني الاطلاع عليها والاختيار منها!
ظننت أنها ميزة جديدة من Claude Code، ولكن اكتشفت بعد ذلك أنها ميزة من superpowers موجودة في Skill اسمها brainstorming واسم هذه الميزة Visual Companion.
فتحت الصفحة ووجدت 3 اقتراحات بالفعل (ليس المنتج النهائي، إنما مجرد مسودَّات للتصميم)، فطلبت منه تغيير الفكرة واستخدام أسلوب آخر للتصميم، فأعطاني 3 اقتراحات أخرى على نفس الصفحة، ثم أكملنا العمل بنفس هذا الأسلوب، أنا أشرح وهو يُنشئ مجموعة من الاقتراحات، ثم نتفق على الشكل النهائي.
ببساطة، تُفعِّل هذه الميزة خادم Node.js محلي، ثم تُنشئ مجموعة من الاقتراحات (Mockups/Concepts)، ثم يعرضها الخادم في الصفحة الرئيسية ويسمح لك باختيار واحد من هذه الاقتراحات.
بعد الاختيار، يمكنك أن تُخبر Claude Code أنك اخترت المقترح المناسب، أو تطلب منه إنشاء مقترحات أخرى، وتستمر عملية التطوير.
الصورة المرفقة كانت لمجموعة من الاقتراحات لقسم الاحصائيات في موقع مبادرة الكتب المُيسّرة واخترت المقترح الثالث 😁
ميزة ممتازة لمشاهدة التصاميم قبل تنفيذها مع أدوات البرمجة بالذكاء الاصطناعي (Claude Code أو غيره) أنصح بتجربتها.
والسلام عليكم 👋🏻
نشرت منذ ثلاثة أيام عن superpowers و superpowers-ruby واكتشفت أنني لا أستغلها بالكامل وذلك خلال إنشاء صفحة لمبادرة الكتب المُيسّرة:
https://ieasybooks.com
بدأت التخطيط مع Claude Code من خلال إعطائه تفاصيل الهوية البصرية لمبادرة الكتب المُيسّرة (الألوان والشعار والخطوط وغيرها) وكل مستودعات مشاريع المبادرة.
تفاجأت بعد أن انتهى من "التفكير" أنه أنشأ خادمًا محليًّا على localhost:59100 وأضاف إلى الصفحة الرئيسية 3 اقتراحات لشكل الصفحة الرئيسية وطلب مني الاطلاع عليها والاختيار منها!
ظننت أنها ميزة جديدة من Claude Code، ولكن اكتشفت بعد ذلك أنها ميزة من superpowers موجودة في Skill اسمها brainstorming واسم هذه الميزة Visual Companion.
فتحت الصفحة ووجدت 3 اقتراحات بالفعل (ليس المنتج النهائي، إنما مجرد مسودَّات للتصميم)، فطلبت منه تغيير الفكرة واستخدام أسلوب آخر للتصميم، فأعطاني 3 اقتراحات أخرى على نفس الصفحة، ثم أكملنا العمل بنفس هذا الأسلوب، أنا أشرح وهو يُنشئ مجموعة من الاقتراحات، ثم نتفق على الشكل النهائي.
ببساطة، تُفعِّل هذه الميزة خادم Node.js محلي، ثم تُنشئ مجموعة من الاقتراحات (Mockups/Concepts)، ثم يعرضها الخادم في الصفحة الرئيسية ويسمح لك باختيار واحد من هذه الاقتراحات.
بعد الاختيار، يمكنك أن تُخبر Claude Code أنك اخترت المقترح المناسب، أو تطلب منه إنشاء مقترحات أخرى، وتستمر عملية التطوير.
الصورة المرفقة كانت لمجموعة من الاقتراحات لقسم الاحصائيات في موقع مبادرة الكتب المُيسّرة واخترت المقترح الثالث 😁
ميزة ممتازة لمشاهدة التصاميم قبل تنفيذها مع أدوات البرمجة بالذكاء الاصطناعي (Claude Code أو غيره) أنصح بتجربتها.
والسلام عليكم 👋🏻
❤5
لا يختلف Codex عن Claude Code كثيرًا..
بدأت منذ ثلاثة أسابيع في استخدام Codex باشتراك 20$ و Claude Code باشتراك 100$ في نفس الوقت للعمل على مهمات متشابهة وأحيانا للعمل على نفس المهمة.
والنتيجة التي توصلت إليها أن Codex ليس أقل من Claude Code وأن GPT 5.4 ليس أسوأ من Opus 4.6، بل أن Codex باشتراك 20$ يعطيك كمية Tokens أكثر بكثير من اشتراك 20$ في Claude Code وقد تكفيك لأسبوع كامل في حال الاستخدام المنضبط وعدم الإهدار.
يبدو أنني سأنتقل من Claude Code إلى Codex بالكامل قريبًا 😁
بدأت منذ ثلاثة أسابيع في استخدام Codex باشتراك 20$ و Claude Code باشتراك 100$ في نفس الوقت للعمل على مهمات متشابهة وأحيانا للعمل على نفس المهمة.
والنتيجة التي توصلت إليها أن Codex ليس أقل من Claude Code وأن GPT 5.4 ليس أسوأ من Opus 4.6، بل أن Codex باشتراك 20$ يعطيك كمية Tokens أكثر بكثير من اشتراك 20$ في Claude Code وقد تكفيك لأسبوع كامل في حال الاستخدام المنضبط وعدم الإهدار.
يبدو أنني سأنتقل من Claude Code إلى Codex بالكامل قريبًا 😁
❤5
خان المُبرمجين (علي فاضل)
Photo
هل تعرف كم عمر اعتماديات مشروعك؟
وجدت من فترة مكتبة (أو فكرة) تُسمَّى libyear وهي تعمل كالتالي:
إذا كان مشروعك يعتمد على إصدار من مكتبة ما، وكان هذا الإصدار أقدم بسنة من الإصدار الأخير للمكتبة نفسها، فهذا يُضيف سنة إلى عمر اعتماديات مشروعك إجمالًا.
كلما ارتفع هذا الرقم (عمر الاعتماديات) زاد القلق نوعًا ما 🤓 وكلما نقص فهذا يعني أن مشروعك في "ريعان شبابه".
كنت أُحدِّث الاعتماديات في MilkStraw AI البارحة في Ruby و JS (حدَّثت Ruby نفسها إلى 4.0.2 🎉) وحسبت الـ libyear للغتين فوجدت أننا متأخرون 4.7 سنة في اعتماديات Ruby و 45.48 سنة في JS، رغم أنني حدَّثت الاعتماديات لآخر نسخة (واضح سبب كرهي لـ JS 😂).
سبب هذا الرقم الكبير في JS هو تأخر المطوِّرين في تحديث اعتماديات مكتباتهم نفسها.
فمثلًا، مكتبة tar موجودة في ملف yarn.lock وهي ليست اعتماديةً مباشرةً لمشروعنا، فأضافت 0.04 إلى مجموع الـ libyear الخاص بنا (كمية الاعتماديات غير المباشرة في JS مُرعبة 😂).
يمكنك التأكد من الـ libyear الخاص بمشروعك في أغلب اللغات المشهورة من خلال المكتبات الموجودة في هذا الرابط:
https://libyear.com
كما يمكنك إضافة الـ libyear كخطوة من خطوات الـ CI الخاص بمشروعك للمحافظة عليه تحت رقم معيَّن (100 سنة مثلًا).
حافظ على شباب مشروعك، والسلام عليكم 👋🏻
وجدت من فترة مكتبة (أو فكرة) تُسمَّى libyear وهي تعمل كالتالي:
إذا كان مشروعك يعتمد على إصدار من مكتبة ما، وكان هذا الإصدار أقدم بسنة من الإصدار الأخير للمكتبة نفسها، فهذا يُضيف سنة إلى عمر اعتماديات مشروعك إجمالًا.
كلما ارتفع هذا الرقم (عمر الاعتماديات) زاد القلق نوعًا ما 🤓 وكلما نقص فهذا يعني أن مشروعك في "ريعان شبابه".
كنت أُحدِّث الاعتماديات في MilkStraw AI البارحة في Ruby و JS (حدَّثت Ruby نفسها إلى 4.0.2 🎉) وحسبت الـ libyear للغتين فوجدت أننا متأخرون 4.7 سنة في اعتماديات Ruby و 45.48 سنة في JS، رغم أنني حدَّثت الاعتماديات لآخر نسخة (واضح سبب كرهي لـ JS 😂).
سبب هذا الرقم الكبير في JS هو تأخر المطوِّرين في تحديث اعتماديات مكتباتهم نفسها.
فمثلًا، مكتبة tar موجودة في ملف yarn.lock وهي ليست اعتماديةً مباشرةً لمشروعنا، فأضافت 0.04 إلى مجموع الـ libyear الخاص بنا (كمية الاعتماديات غير المباشرة في JS مُرعبة 😂).
يمكنك التأكد من الـ libyear الخاص بمشروعك في أغلب اللغات المشهورة من خلال المكتبات الموجودة في هذا الرابط:
https://libyear.com
كما يمكنك إضافة الـ libyear كخطوة من خطوات الـ CI الخاص بمشروعك للمحافظة عليه تحت رقم معيَّن (100 سنة مثلًا).
حافظ على شباب مشروعك، والسلام عليكم 👋🏻
😁4❤2🔥2
خان المُبرمجين (علي فاضل)
Photo
مغامرات فاشلة 🥲
يستغرق تشغيل كامل الـ CI في MilkStraw AI على حاسبي الشخصي (MacBook Pro - M3 Pro) 90 ثانية تقريبًا وهو يقوم بتسع مهام منفصلة، منها:
- التأكد من تنسيق الشيفرة البرمجية
- التأكد من عدم وجود أي مكتبات تحتاج إلى تحديث بسبب الثغرات الأمنية
- التأكد من صحة حالات الاختبار وتغطيتها لكامل الشيفرة البرمجية
وغيرها..
تستغرق مهمة حالات الاختبار أكثر من ثلث الوقت بقليل (35 ثانية تقريبًا)، فقررت محاولة تسريعها 🙂
منذ أيام، قرأت عن مكتبة TestProf وهي تهتم بتحديد مسببات البطء في حالات الاختبار ومعالجتها، فبدأت العمل مع Claude Code لتحسين وقت تنفيذ حالات اختبارنا (تذكر، هي 35 ثانية فقط في الأساس).
صرفت 4 أو 5 ساعات من وقتي في هذا الأمر، وفي النهاية توصَّلت لنتيجة واحدة: لا يمكن التحسين أكثر من ذلك.
وعندما راجعت نفسي وتفكَّرت قليلًا، وجدت أن 90 ثانية للـ CI بالكامل و 35 ثانية لحالات الاختبار لم تكن تحتاج إلى تحسين في الأساس، إذا أخذنا في الاعتبار أن مراجعة BugBot مثلا تستغرق 7 إلى 10 دقائق!
يوجد لدينا 2300 اختبار تقريبًا، تحتوي على أكثر من 6450 توكيد (Assertion)؛ لذا فإن انتهائها في 35 ثانية كان أمرًا ممتازًا في الأساس.
لذلك عزيزي القارئ، لا تكن مثل علي، ولا تحاول تحسين ما هو حسن بالفعل، واهتم بالأمور الأكثر إفادة لك ولجهة عملك، وفكِّر مليًّا قبل أن تستهويك المكتبات الجديدة 😁
والسلام عليكم 👋🏻
يستغرق تشغيل كامل الـ CI في MilkStraw AI على حاسبي الشخصي (MacBook Pro - M3 Pro) 90 ثانية تقريبًا وهو يقوم بتسع مهام منفصلة، منها:
- التأكد من تنسيق الشيفرة البرمجية
- التأكد من عدم وجود أي مكتبات تحتاج إلى تحديث بسبب الثغرات الأمنية
- التأكد من صحة حالات الاختبار وتغطيتها لكامل الشيفرة البرمجية
وغيرها..
تستغرق مهمة حالات الاختبار أكثر من ثلث الوقت بقليل (35 ثانية تقريبًا)، فقررت محاولة تسريعها 🙂
منذ أيام، قرأت عن مكتبة TestProf وهي تهتم بتحديد مسببات البطء في حالات الاختبار ومعالجتها، فبدأت العمل مع Claude Code لتحسين وقت تنفيذ حالات اختبارنا (تذكر، هي 35 ثانية فقط في الأساس).
صرفت 4 أو 5 ساعات من وقتي في هذا الأمر، وفي النهاية توصَّلت لنتيجة واحدة: لا يمكن التحسين أكثر من ذلك.
وعندما راجعت نفسي وتفكَّرت قليلًا، وجدت أن 90 ثانية للـ CI بالكامل و 35 ثانية لحالات الاختبار لم تكن تحتاج إلى تحسين في الأساس، إذا أخذنا في الاعتبار أن مراجعة BugBot مثلا تستغرق 7 إلى 10 دقائق!
يوجد لدينا 2300 اختبار تقريبًا، تحتوي على أكثر من 6450 توكيد (Assertion)؛ لذا فإن انتهائها في 35 ثانية كان أمرًا ممتازًا في الأساس.
لذلك عزيزي القارئ، لا تكن مثل علي، ولا تحاول تحسين ما هو حسن بالفعل، واهتم بالأمور الأكثر إفادة لك ولجهة عملك، وفكِّر مليًّا قبل أن تستهويك المكتبات الجديدة 😁
والسلام عليكم 👋🏻
❤8
This media is not supported in your browser
VIEW IN TELEGRAM
ولهذا السبب أوقفنا مراجعات Claude في MilkStraw AI 😂
🤣4❤1
خان المُبرمجين (علي فاضل)
Photo
حاول بناء الحلول المناسبة لمشكلتك.
نستخدم في MilkStraw AI مكتبة GoodJob لمعالجة البيانات وتنفيذ المهام في الخلفية (كمثال، إرسال رسائل البريد الإلكتروني).
المكتبة ممتازة وتعمل بكفاءة ولكن ينقصها شيء واحد: إمكانية إنشاء Workflows متكاملة تعتمد على Directed Acyclic Graph (DAG).
بحثنا سريعًا عن حل لتنظيم سير هذه المهام، فلم نجد ما يناسب بيئة عملنا التي تشترط:
- الاعتماد على قاعدة بيانات PostgreSQL فقط.
- عدم الاعتماد على Redis.
فكان الحل في إنشاء مكتبة جديدة لإنجاز هذا الأمر وسميتها GoodPipeline 😂
خلال التطوير، لاحظت وجود بطء في مكتبة GoodJob وهذا يجعل إنشاء Workflows فيها الكثير من المهام المبدئية أو الجذرية (المهام التي يبدأ منها الـ Workflow) بطيئًا نسبيًّا.
ففتحت مستودع مكتبة GoodJob وشغَّلت Claude Code وبدأنا العمل لتحسين هذا البطء 🤓 وكانت النتيجة في هذا التعديل
قلّص هذا التعديل مدة إنشاء الـ Workflows من 3 دقائق ونصف تقريبًا إلى أقل من دقيقة! التعديل متاح الآن ومفيد لجميع مستخدمي المكتبة.
لولا توفيق الله ثم أدوات الذكاء الاصطناعي، لما استثمرت الجهد في تحسين المكتبة بهذا الشكل. نصيحتي: ساهم في تحسين الأدوات التي تستخدمها يوميًا حسب احتياجك.
وأخيرًا، تذكر دائمًا الإفصاح عند استخدام أدوات الذكاء الاصطناعي في مساهماتك البرمجية 🙂
والسلام عليكم 👋🏻
نستخدم في MilkStraw AI مكتبة GoodJob لمعالجة البيانات وتنفيذ المهام في الخلفية (كمثال، إرسال رسائل البريد الإلكتروني).
المكتبة ممتازة وتعمل بكفاءة ولكن ينقصها شيء واحد: إمكانية إنشاء Workflows متكاملة تعتمد على Directed Acyclic Graph (DAG).
بحثنا سريعًا عن حل لتنظيم سير هذه المهام، فلم نجد ما يناسب بيئة عملنا التي تشترط:
- الاعتماد على قاعدة بيانات PostgreSQL فقط.
- عدم الاعتماد على Redis.
فكان الحل في إنشاء مكتبة جديدة لإنجاز هذا الأمر وسميتها GoodPipeline 😂
خلال التطوير، لاحظت وجود بطء في مكتبة GoodJob وهذا يجعل إنشاء Workflows فيها الكثير من المهام المبدئية أو الجذرية (المهام التي يبدأ منها الـ Workflow) بطيئًا نسبيًّا.
ففتحت مستودع مكتبة GoodJob وشغَّلت Claude Code وبدأنا العمل لتحسين هذا البطء 🤓 وكانت النتيجة في هذا التعديل
قلّص هذا التعديل مدة إنشاء الـ Workflows من 3 دقائق ونصف تقريبًا إلى أقل من دقيقة! التعديل متاح الآن ومفيد لجميع مستخدمي المكتبة.
لولا توفيق الله ثم أدوات الذكاء الاصطناعي، لما استثمرت الجهد في تحسين المكتبة بهذا الشكل. نصيحتي: ساهم في تحسين الأدوات التي تستخدمها يوميًا حسب احتياجك.
وأخيرًا، تذكر دائمًا الإفصاح عند استخدام أدوات الذكاء الاصطناعي في مساهماتك البرمجية 🙂
والسلام عليكم 👋🏻
👏12❤4🔥1
يُعالج نموذج Gemini اللغة العربية بطريقة غريبة!
غالبًا ما أستخدم نماذج Gemini لمراجعة وتدقيق المحتوى الذي أكتبه؛ لاكتشاف الأخطاء الإملائية والنحوية وتصحيحها.
أكتب له عادةً:
Review this LinkedIn post for Arabic writing and grammar issues:
{content}
لكنني بدأت ألاحظ ملاحظاتٍ غريبة، مثل: كتبتَ "تُسمَّي" ويجب أن تكتب "تُسمَّى"، وعندما أعود لما كتبت، أجد أنني استخدمتُ الألف المقصورة "ى" بالفعل ولم أستخدم الياء "ي"!
أو ملاحظات من نوع: كتبتَ الكلمة (س) بهمزة قطع ويجب أن تكتبها بهمزة وصل، فأعود للكلمة فأجدها مكتوبةً بهمزة وصلٍ أساسًا!
فأصبحت أشك أن نماذج Gemini تُعالج المدخلات العربية فتستبدل الألف المقصورة بياء، والألف العادية بألف مهموزة، ولكن الغريب أن هذا الأمر لا يتكرر دائمًا.
يمكنكم مراجعة المحادثة بيني وبين Gemini عبر هذا الرابط:
https://gemini.google.com/share/71e4b417afd8
هل لاحظتم شيئًا شبيهًا؟
غالبًا ما أستخدم نماذج Gemini لمراجعة وتدقيق المحتوى الذي أكتبه؛ لاكتشاف الأخطاء الإملائية والنحوية وتصحيحها.
أكتب له عادةً:
Review this LinkedIn post for Arabic writing and grammar issues:
{content}
لكنني بدأت ألاحظ ملاحظاتٍ غريبة، مثل: كتبتَ "تُسمَّي" ويجب أن تكتب "تُسمَّى"، وعندما أعود لما كتبت، أجد أنني استخدمتُ الألف المقصورة "ى" بالفعل ولم أستخدم الياء "ي"!
أو ملاحظات من نوع: كتبتَ الكلمة (س) بهمزة قطع ويجب أن تكتبها بهمزة وصل، فأعود للكلمة فأجدها مكتوبةً بهمزة وصلٍ أساسًا!
فأصبحت أشك أن نماذج Gemini تُعالج المدخلات العربية فتستبدل الألف المقصورة بياء، والألف العادية بألف مهموزة، ولكن الغريب أن هذا الأمر لا يتكرر دائمًا.
يمكنكم مراجعة المحادثة بيني وبين Gemini عبر هذا الرابط:
https://gemini.google.com/share/71e4b417afd8
هل لاحظتم شيئًا شبيهًا؟
❤3👍1