تعلم الأدوات التي تستخدمها 🤓 (4 دقائق للقراءة)
https://www.johnhawthorn.com/2024/ruby-might-be-faster-than-you-think/
https://www.johnhawthorn.com/2024/ruby-might-be-faster-than-you-think/
❤5
في MilkStraw AI نعتمد على Slack لإيصال بعض التنبيهات المهمة من منصتنا.
على سبيل المثال، عند فشل بعض المهمات الحرجة في المنصة، نُرسل رسالة على مجموعة في Slack ليتعامل الفريق معها بسرعة ولا تختفي بين الرسوم البيانية الكثيرة والسجلات الطويلة.
ولكننا نحتاج أحيانا لإيقاف بعض هذه التنبيهات في بعض الحالات لأننا نعلم أن هذا الخطأ سيحدث دائما ولمدة أسبوع مثلا بعد التحدث مع العميل وطلبِنا لبعض التعديلات من طرفه.
فظهرت الحاجة لحل يمكننا من إيقاف التنبيهات لمدة معينة أو إلى الأبد بناء على ظهور نمط معين أو كلمة/مجموعة من الكلمات فيه.
فقمنا بإنشاء جدول جديد في قاعدة البيانات باسم
فأصبحنا نكتب التالي قبل إرسال أي تنبيه إلى Slack لنتخطى إرسال التنبيه الحالي في حال وجود قاعدة تتطابق معه:
بهذا الشكل حافظنا على الأخطاء في التقارير عامة، وأصبح لدينا القدرة على تقليل التنبيهات والحصول على العدد المطلوب منها فقط.
والسلام عليكم 👋🏻
على سبيل المثال، عند فشل بعض المهمات الحرجة في المنصة، نُرسل رسالة على مجموعة في Slack ليتعامل الفريق معها بسرعة ولا تختفي بين الرسوم البيانية الكثيرة والسجلات الطويلة.
ولكننا نحتاج أحيانا لإيقاف بعض هذه التنبيهات في بعض الحالات لأننا نعلم أن هذا الخطأ سيحدث دائما ولمدة أسبوع مثلا بعد التحدث مع العميل وطلبِنا لبعض التعديلات من طرفه.
فظهرت الحاجة لحل يمكننا من إيقاف التنبيهات لمدة معينة أو إلى الأبد بناء على ظهور نمط معين أو كلمة/مجموعة من الكلمات فيه.
فقمنا بإنشاء جدول جديد في قاعدة البيانات باسم
NotificationSuppressionRule والشيفرة التابعة له موجودة في الصورة.فأصبحنا نكتب التالي قبل إرسال أي تنبيه إلى Slack لنتخطى إرسال التنبيه الحالي في حال وجود قاعدة تتطابق معه:
return if NotificationSuppressionRule.suppressed?(use_case_id: use_case_id, message: message)
بهذا الشكل حافظنا على الأخطاء في التقارير عامة، وأصبح لدينا القدرة على تقليل التنبيهات والحصول على العدد المطلوب منها فقط.
والسلام عليكم 👋🏻
❤2👍2
احتجت إلى تحميل قائمة التشغيل هذه من YouTube:
https://www.youtube.com/playlist?list=PLVVfonyXVJI3BXB9Wd2C5yXMr63w3SGXB
أستخدم غالبا yt-dlp لإجراء هذه العملية، فكتبت الأمر
فتذكرت أن عندي Mise 🤩
فنفّذت الأوامر الموجودة في الصورة وبدأ التحميل بدون أي مشاكل ولله الحمد، هذه من ميزات أن تكون مبرمجا 🤓
https://www.youtube.com/playlist?list=PLVVfonyXVJI3BXB9Wd2C5yXMr63w3SGXB
أستخدم غالبا yt-dlp لإجراء هذه العملية، فكتبت الأمر
yt-dlp ... ليبدأ التحميل، فاكتشفت أن yt-dlp غير موجود على الجهاز، فكتبت الأمر python لأعرف نسخة Python الموجودة على الجهاز، فاكتشفت أن Python غير موجودة على الجهاز أيضا 😂فتذكرت أن عندي Mise 🤩
فنفّذت الأوامر الموجودة في الصورة وبدأ التحميل بدون أي مشاكل ولله الحمد، هذه من ميزات أن تكون مبرمجا 🤓
❤9
🔗 رباط التقنية
المجمع العربي للقنوات التقنية
جمعنا لك أفضل القنوات التقنية العربية في مكان واحد، لتجد كل المحتوى المفيد بسهولة وبلا عناء.
📌 تصفح القنوات عبر الموقع:
https://alzanad.github.io/ribat-altaqniyyah
📜 اشترك بالقائمة الموحدة على تليجرام:
https://news.1rj.ru/str/addlist/Gg-LFze5N89mMTJk
💬 للإنضمام راجع الشروط على الموقع:
@alzaanad
#رباط_التقنية
المجمع العربي للقنوات التقنية
جمعنا لك أفضل القنوات التقنية العربية في مكان واحد، لتجد كل المحتوى المفيد بسهولة وبلا عناء.
📌 تصفح القنوات عبر الموقع:
https://alzanad.github.io/ribat-altaqniyyah
📜 اشترك بالقائمة الموحدة على تليجرام:
https://news.1rj.ru/str/addlist/Gg-LFze5N89mMTJk
💬 للإنضمام راجع الشروط على الموقع:
@alzaanad
#رباط_التقنية
❤4
من أكبر فوائد الذكاء الاصطناعي داخل المحررات مثل Cursor وغيرها إمكانية كتابة أوامر سريعة على الـ Terminal.
مثلا من لحظات كتبت له:
Kill process holding port 3000
وكتب لي:
lsof -ti :3000 | xargs kill -9
كان ممكن يأخذ من وقتي 5 دقائق بحث 😂
مثلا من لحظات كتبت له:
Kill process holding port 3000
وكتب لي:
lsof -ti :3000 | xargs kill -9
كان ممكن يأخذ من وقتي 5 دقائق بحث 😂
❤8😁6
انتهيت من قراءة هذا المقال (أو تفريغ المحاضرة 🤓) وأنصح بقراءته وبشدة:
https://pluralistic.net/2025/12/05/pop-that-bubble
المفاهيم التي يتطرق لها وترتيب الأفكار جميل جدا، وكما قال "فرقع الفقاعة" 😆
https://pluralistic.net/2025/12/05/pop-that-bubble
المفاهيم التي يتطرق لها وترتيب الأفكار جميل جدا، وكما قال "فرقع الفقاعة" 😆
❤6
أحدهم بدأ نشر مقال يوميا عن أسباب حبه للغة Ruby على هذا الموقع من بداية السنة:
https://lovingruby.com/reasons
المقالات قصيرة وممتعة، أنصح المهتمين بقرائتها ❤️
https://lovingruby.com/reasons
المقالات قصيرة وممتعة، أنصح المهتمين بقرائتها ❤️
365 reasons to love Ruby
A daily project sharing 365 reasons to love Ruby.
❤3
انضممت إلى فريق MilkStraw AI قبل حوالي 3 أشهر، ومنذ ذلك الحين عملت مع الفريق على العديد من المشاريع المؤثرة:
- أعدنا كتابة Microservice كانت تعمل بـ Python ودمجناها داخل مشروع Rails الخاص بنا (شيفرة برمجية واحدة 🫶)
- رفعنا نسبة الشيفرة البرمجية المُغطَّاة بالاختبارات إلى 100% 🚀 (مفيد جدا لوكلاء الذكاء الاصطناعي)
- نقلنا الـ Frontend من Hotwire (وهو الـ Stack الافتراضي في Rails) إلى InertiaJS مع VueJS (للأسف 🙄)
- أعدنا هيكلة مشروع Rails الخاص بنا ليتَّبِع معايير Rails القياسية ❤️ (نصيحة: لا تحاول محاربة التقنية التي تستخدمها)
- خفَّضنا تكلفة البنية التحتية 4 أضعاف 💰 وغيرها من الأمور الممتعة
كفريق، أضفنا عشرات الآلاف من الأسطر البرمجية، وحذفنا مثلها تقريبا 😂، جربنا كل أدوات الذكاء الاصطناعي المتاحة للبرمجة، واستقبلنا PRs من أعضاء غير تقنيين، أضفنا مشاكل إلى المشروع ثم أصلحناها، وساهمنا في المصادر المفتوحة.
بعد هذه الرحلة القصيرة، سعيد بإعلان إغلاق جولتنا الاستثمارية (Seed) 🎉 لتمويل المرحلة القادمة من مهمتنا: تقليل فواتير بنيتك التحتية وتحسين الوصول إلى الخدمات السحابية ومراقبتها.
- أعدنا كتابة Microservice كانت تعمل بـ Python ودمجناها داخل مشروع Rails الخاص بنا (شيفرة برمجية واحدة 🫶)
- رفعنا نسبة الشيفرة البرمجية المُغطَّاة بالاختبارات إلى 100% 🚀 (مفيد جدا لوكلاء الذكاء الاصطناعي)
- نقلنا الـ Frontend من Hotwire (وهو الـ Stack الافتراضي في Rails) إلى InertiaJS مع VueJS (للأسف 🙄)
- أعدنا هيكلة مشروع Rails الخاص بنا ليتَّبِع معايير Rails القياسية ❤️ (نصيحة: لا تحاول محاربة التقنية التي تستخدمها)
- خفَّضنا تكلفة البنية التحتية 4 أضعاف 💰 وغيرها من الأمور الممتعة
كفريق، أضفنا عشرات الآلاف من الأسطر البرمجية، وحذفنا مثلها تقريبا 😂، جربنا كل أدوات الذكاء الاصطناعي المتاحة للبرمجة، واستقبلنا PRs من أعضاء غير تقنيين، أضفنا مشاكل إلى المشروع ثم أصلحناها، وساهمنا في المصادر المفتوحة.
بعد هذه الرحلة القصيرة، سعيد بإعلان إغلاق جولتنا الاستثمارية (Seed) 🎉 لتمويل المرحلة القادمة من مهمتنا: تقليل فواتير بنيتك التحتية وتحسين الوصول إلى الخدمات السحابية ومراقبتها.
❤14
من إيجابيات أدوات المراجعة بالذكاء الاصطناعي مثل Cursor BugBot و CodeRabbit وغيرها أن صاحب التعديل يتلقّى الكثير من التعليقات قبل إرسال التعديل إلى المُراجع البشري، مما يقلل النقاشات بين أعضاء الفريق.
نستخدم في MilkStraw AI أداة Cursor BugBot وشخصيًّا تلقيت 48 تعليقًا من الأداة في آخر 10 تعديلات أجريتها، بمتوسط 4 إلى 5 تعليقات لكل تعديل.
جزء من هذه التعليقات فيه نوع من الفلسفة، ولكن الجزء الأكبر منها مهم ومفيد وجعلني أعالج المشاكل قبل وصول التعديل إلى المُراجع البشري واختصر علينا الكثير من الوقت.
لا تتردد في إضافة مثل هذه الأدوات إلى مشروعك، ولكن النصيحة الأهم أن تستخدم أداة واحدة فقط، وجود أكثر من أداة يُصبح مزعجًا في الكثير من الأحيان.
نستخدم في MilkStraw AI أداة Cursor BugBot وشخصيًّا تلقيت 48 تعليقًا من الأداة في آخر 10 تعديلات أجريتها، بمتوسط 4 إلى 5 تعليقات لكل تعديل.
جزء من هذه التعليقات فيه نوع من الفلسفة، ولكن الجزء الأكبر منها مهم ومفيد وجعلني أعالج المشاكل قبل وصول التعديل إلى المُراجع البشري واختصر علينا الكثير من الوقت.
لا تتردد في إضافة مثل هذه الأدوات إلى مشروعك، ولكن النصيحة الأهم أن تستخدم أداة واحدة فقط، وجود أكثر من أداة يُصبح مزعجًا في الكثير من الأحيان.
❤7
نشر Martin Alderson (تعرّفت عليه منذ يومين ويبدو أن مقالاته جيدة) مقالًا بعنوان:
Which programming languages are most token-efficient?
والترجمة: أي لغات البرمجة هي الأكثر كفاءة من حيث الرموز (Tokens)؟
كان يقارن فيه بين لغات البرمجة المختلفة من ناحية استهلاكها للرموز (Tokens) عند استخدامها مع النماذج اللغوية ووكلاء البرمجة.
أختلف قليلًا في طريقة الاختبار واختيار الـ Tokenizer، ولكن من الأشياء اللطيفة أن لغة Ruby كانت من أكثر اللغات كفاءة باستخدامها لعدد قليل من الرموز (Tokens).
في المقابل كانت لغات مثل Rust و JavaScript من أكثر اللغات استهلاكًا للرموز مع تصدّر لغة C ذيل القائمة 😂
أعجبتني فكرة الاختبار وراقت لي النتائج 😁 وهذا يدفعنا للتفكير في تكلفة اختيار التقنيات التي نستخدمها في عصر الذكاء الاصطناعي ووكلاء البرمجة..
رابط المقال:
https://martinalderson.com/posts/which-programming-languages-are-most-token-efficient
Which programming languages are most token-efficient?
والترجمة: أي لغات البرمجة هي الأكثر كفاءة من حيث الرموز (Tokens)؟
كان يقارن فيه بين لغات البرمجة المختلفة من ناحية استهلاكها للرموز (Tokens) عند استخدامها مع النماذج اللغوية ووكلاء البرمجة.
أختلف قليلًا في طريقة الاختبار واختيار الـ Tokenizer، ولكن من الأشياء اللطيفة أن لغة Ruby كانت من أكثر اللغات كفاءة باستخدامها لعدد قليل من الرموز (Tokens).
في المقابل كانت لغات مثل Rust و JavaScript من أكثر اللغات استهلاكًا للرموز مع تصدّر لغة C ذيل القائمة 😂
أعجبتني فكرة الاختبار وراقت لي النتائج 😁 وهذا يدفعنا للتفكير في تكلفة اختيار التقنيات التي نستخدمها في عصر الذكاء الاصطناعي ووكلاء البرمجة..
رابط المقال:
https://martinalderson.com/posts/which-programming-languages-are-most-token-efficient
❤6
وجدت هذا الموقع خلال تصفحي لمنصة X:
https://howbrowserswork.com
بسيط وخفيف يُقرأ في 10 دقائق يشرح كيف تعمل المتصفحات دون الدخول في الكثير من التفاصيل وبطريقة تفاعلية.
https://howbrowserswork.com
بسيط وخفيف يُقرأ في 10 دقائق يشرح كيف تعمل المتصفحات دون الدخول في الكثير من التفاصيل وبطريقة تفاعلية.
❤5🔥2
نصيحة لكتابة المحتوى باستخدام الذكاء الاصطناعي (Agentic Writing):
احتفظ بملفاتك (مثل .md) في مستودع Git، وأضفها إلى المستودع (Staging) قبل توجيه الأمر (Prompt) للوكيل البرمجي.
بهذا تضمن آلية استرجاع (Rollback) كاملة بنسبة 100%، وتستفيد من ميزة مراجعة الفوارق (Diffs) داخل المحرر البرمجي الذي تستخدمه، بدلاً من التوسل للنماذج اللغوية للعودة للنسخة السابقة أو إضاعة وقتك في التدقيق اليدوي.
احتفظ بملفاتك (مثل .md) في مستودع Git، وأضفها إلى المستودع (Staging) قبل توجيه الأمر (Prompt) للوكيل البرمجي.
بهذا تضمن آلية استرجاع (Rollback) كاملة بنسبة 100%، وتستفيد من ميزة مراجعة الفوارق (Diffs) داخل المحرر البرمجي الذي تستخدمه، بدلاً من التوسل للنماذج اللغوية للعودة للنسخة السابقة أو إضاعة وقتك في التدقيق اليدوي.
❤5
عندي الكثير من الفروع المحلية (Local Branches) وأردت تنظيف المستودع (Repository) بحذف كل الفروع غير الموجودة في المستودع على GitHub
فطلبت من Gemini كتابة أمر يفعل ذلك وقد كتب 👇
حذف من عندي 42 فرع بعد تنفيذه، وحذفت يدويا الفروع التي لا أحتاجها (تجارب فاشلة واختبارات لا معنى لها 😂)
الأمر:
فطلبت من Gemini كتابة أمر يفعل ذلك وقد كتب 👇
حذف من عندي 42 فرع بعد تنفيذه، وحذفت يدويا الفروع التي لا أحتاجها (تجارب فاشلة واختبارات لا معنى لها 😂)
الأمر:
git fetch -p && git branch -vv | \
grep ': gone]' | \
awk '{print $1}' | \
xargs git branch -D
❤1😁1
خان المُبرمجين (علي فاضل)
Photo
مشهد تمثيلي:
- علي يعمل على الحاسوب
- علي قرر الخروج من المنزل
- تصل إشعارات على تطبيقات مثل WhatsApp و Telegram
- يُصدر الحاسوب صوتًا مرتفعًا
- تستيقظ ابنتي 😀
تكرر هذا المشهد كثيرًا، ففكرت في إنشاء برنامج بسيط لأنظمة MacOS مهمته ببساطة:
1. مراقبة نشاط مدخلات الحاسوب (الفأرة ولوحة المفاتيح)
2. كتم صوت الحاسوب إذا توقف النشاط لأكثر من س من الدقائق (5 دقائق مثلا)
3. كتم صوت الحاسوب عند إغلاقه
ليس لدي أي خبرة في إنشاء تطبيقات سطح المكتب لأنظمة MacOS وليس لدي أي تجارب سابقة مع لغة Swift.
شغّلت Claude Code مع نموذج Opus 4.5 وفعّلت النظام الخطير 😈 باستخدام:
ثم أعطيته التعليمات الموجودة في الصورة 👆
عمِل لـ 15 دقيقة تقريبا وانتهى، شغّلت البرنامج، وجدت خطأً، أرسلته لـ Claude فأصلحه، شغّلت البرنامج مرة ثانية، وجدت خطأً، أرسلته لـ Claude فأصلحه، شغّلت البرنامج وكانت الصدمة 😂
البرنامج يعمل بدون أي مشاكل، يتتبع نشاط المدخلات بشكل لحظي ويكتم صوت الحاسوب كما هو مطلوب.
والأدهى من ذلك، أن النموذج أضاف ميزة أخرى من بنات أفكاره (إن كان يُفكّر) وهي إلغاء الكتم عند اكتشاف أي نشاط على مدخلات الحاسوب 🙂 لم أطلب منه هذه الميزة، ولكنها ممتازة.
اطّلعت سريعا على الشيفرة البرمجية وأضفت GitHub Action ليُنشئ ملف dmg للبرنامج عند كل نسخة جديدة ورفعته، يمكنك الاطلاع على الشيفرة البرمجية من هنا:
https://github.com/AliOsm/AutoMute
أو تحميل نسخة من البرنامج من هنا:
https://github.com/AliOsm/AutoMute/releases
سأنشر في منشور قادم بعض الملاحظات التي لاحظتها وأنا أعمل على هذا المشروع السريع (جدا)
والسلام عليكم 👋🏻
- علي يعمل على الحاسوب
- علي قرر الخروج من المنزل
- تصل إشعارات على تطبيقات مثل WhatsApp و Telegram
- يُصدر الحاسوب صوتًا مرتفعًا
- تستيقظ ابنتي 😀
تكرر هذا المشهد كثيرًا، ففكرت في إنشاء برنامج بسيط لأنظمة MacOS مهمته ببساطة:
1. مراقبة نشاط مدخلات الحاسوب (الفأرة ولوحة المفاتيح)
2. كتم صوت الحاسوب إذا توقف النشاط لأكثر من س من الدقائق (5 دقائق مثلا)
3. كتم صوت الحاسوب عند إغلاقه
ليس لدي أي خبرة في إنشاء تطبيقات سطح المكتب لأنظمة MacOS وليس لدي أي تجارب سابقة مع لغة Swift.
شغّلت Claude Code مع نموذج Opus 4.5 وفعّلت النظام الخطير 😈 باستخدام:
--allow-dangerously-skip-permissionsثم أعطيته التعليمات الموجودة في الصورة 👆
عمِل لـ 15 دقيقة تقريبا وانتهى، شغّلت البرنامج، وجدت خطأً، أرسلته لـ Claude فأصلحه، شغّلت البرنامج مرة ثانية، وجدت خطأً، أرسلته لـ Claude فأصلحه، شغّلت البرنامج وكانت الصدمة 😂
البرنامج يعمل بدون أي مشاكل، يتتبع نشاط المدخلات بشكل لحظي ويكتم صوت الحاسوب كما هو مطلوب.
والأدهى من ذلك، أن النموذج أضاف ميزة أخرى من بنات أفكاره (إن كان يُفكّر) وهي إلغاء الكتم عند اكتشاف أي نشاط على مدخلات الحاسوب 🙂 لم أطلب منه هذه الميزة، ولكنها ممتازة.
اطّلعت سريعا على الشيفرة البرمجية وأضفت GitHub Action ليُنشئ ملف dmg للبرنامج عند كل نسخة جديدة ورفعته، يمكنك الاطلاع على الشيفرة البرمجية من هنا:
https://github.com/AliOsm/AutoMute
أو تحميل نسخة من البرنامج من هنا:
https://github.com/AliOsm/AutoMute/releases
سأنشر في منشور قادم بعض الملاحظات التي لاحظتها وأنا أعمل على هذا المشروع السريع (جدا)
والسلام عليكم 👋🏻
🔥11❤1👏1
بدأ إطار عمل Ruby on Rails سنة 2004، وفي قول آخر سنة 2002، وهذه التحديثات التي حصلت في الإصدار الأخير 8.1.2:
https://github.com/rails/rails/releases/tag/v8.1.2
أدخل على الرابط وابحث عن كلمة Fix، ستجد أنها تكررت أكثر من 20 مرة.
هذه مكتبة يعمل على تطويرها مئات المبرمجين على مدار أكثر من 20 سنة، ولا تزال تُصلح الأخطاء في كل إصدار.
أظن أن الرسالة وصلت 😁
https://github.com/rails/rails/releases/tag/v8.1.2
أدخل على الرابط وابحث عن كلمة Fix، ستجد أنها تكررت أكثر من 20 مرة.
هذه مكتبة يعمل على تطويرها مئات المبرمجين على مدار أكثر من 20 سنة، ولا تزال تُصلح الأخطاء في كل إصدار.
أظن أن الرسالة وصلت 😁
❤4😁4
خان المُبرمجين (علي فاضل)
مشهد تمثيلي: - علي يعمل على الحاسوب - علي قرر الخروج من المنزل - تصل إشعارات على تطبيقات مثل WhatsApp و Telegram - يُصدر الحاسوب صوتًا مرتفعًا - تستيقظ ابنتي 😀 تكرر هذا المشهد كثيرًا، ففكرت في إنشاء برنامج بسيط لأنظمة MacOS مهمته ببساطة: 1. مراقبة نشاط مدخلات…
تكلفة إنشاء البرنامج (على فرض استخدامك لنموذج Opus 4.5 من خلال الـ API) تقريبيًّا هي $14
المحادثة كاملة كان فيها قرابة الـ 16 مليون رمز (Token) أكثر من 90% منها كانت Cached
المحادثة كاملة كان فيها قرابة الـ 16 مليون رمز (Token) أكثر من 90% منها كانت Cached
❤4