انتقل إلى المحتوى

المقالات

← جديد هنا؟ ابدأ من هنا

  • القيادة التقنية: تحويل الخلاف إلى قرار قابل للاختبار

    القيادة التقنية: تحويل الخلاف إلى قرار قابل للاختبار

    ملخص استبدل النقاش الطويل بتجربة صغيرة: اتفق على المعايير أولاً، ثم راجع الأدلة معاً، ثم قرر.

    وجدت نفسي مؤخراً في نقاش هندسي ظل يدور حول الخلاف نفسه. كنا ندرس طريقتين لتنظيم جزء من تطبيق واجهة أمامية، وكانت لكل منهما حجج معقولة. إحدى الطريقتين تعد بفصل أوضح وبنية أكثر اتساقاً، بينما كان القلق من الطريقة الأخرى أننا سندفع ثمن هذه البنية بمستوى إضافي من الوساطة يجعل التغييرات المستقبلية أصعب في التتبع.

    ← اقرأ المزيد
  • القيادة التقنية: افصل الممارسة عن المشكلة التي يفترض أن تحلها

    القيادة التقنية: افصل الممارسة عن المشكلة التي يفترض أن تحلها

    ملخص سمِّ المشكلة والنتيجة والقيود أولاً. عندها تصبح الممارسة المقترحة خياراً من بين عدة خيارات، ويستطيع الفريق الاحتفاظ بالمشكلة حتى لو رفض الحل.

    لاحظت مؤخراً مدى سهولة تحول نقاش هندسي إلى نقاش حول ممارسة محددة، رغم أن نقطة البداية كانت مشكلة مختلفة تماماً. في أحد نقاشات الفريق كنا نتحدث عن إمكانية اعتماد التطوير الموجه بالاختبارات، TDD. وكان من السهل أن يتحول الحوار إلى النقاش المعتاد حول فوائده، والكلفة الإضافية التي يفرضها، ومدى ملاءمته لطريقة عمل الفريق.

    ← اقرأ المزيد
  • القيادة التقنية: عندما لا يعود القرار من صلاحيتك

    القيادة التقنية: عندما لا يعود القرار من صلاحيتك

    ملخص ساعد في توضيح المشكلة ثم انسحب: اربط صاحب القرار بالشخص المتأثر مباشرة بدل أن تحمل القرار ذهابا وإيابا.

    هناك نمط في القيادة أصبحت أكثر انتباها إليه، وهو ما يحدث عندما تتجاوز المشكلة حدود صلاحيتي في اتخاذ القرار. يتكرر هذا في العمل التقني والتنظيمي أكثر مما يبدو للوهلة الأولى. يطرح أحدهم مشكلة، فأساعد في توضيحها، وأراجع بعض الافتراضات، وأجمع السياق، وأحاول دفع الموضوع إلى الأمام. لكن في مرحلة معينة، يتطلب السؤال المتبقي فعلا قرارا لست مخولا باتخاذه.

    ← اقرأ المزيد
  • إعداد الذكاء الاصطناعي المحلي لدي بعد ستة أشهر: 48 GB وQwen3.8 وعنق زجاجة مختلف

    إعداد الذكاء الاصطناعي المحلي لدي بعد ستة أشهر: 48 GB وQwen3.8 وعنق زجاجة مختلف

    ملخص عد الانتقال من 16 GB إلى 48 GB من الذاكرة الموحدة، أصبح بإمكاني استخدام Qwen3.8-27B كنموذج محلي أساسي بدل التنقل بين عدة نماذج أصغر. ومع LM Studio 0.4.25 ومحرك Splash أصبح تشغيل النموذج أسرع وأكثر ملاءمة للعمل اليومي مع OpenCode. نتيجة لذلك، انتقل القيد الأهم بالنسبة لي من حجم النموذج والذاكرة إلى مساحة الـ Context، ولذلك رفعتها من 32K إلى 64K لتقليل الحاجة إلى Compaction خلال جلسات البرمجة الطويلة.

    قبل بضعة أشهر، كتبت عن تجربتي في بناء إعداد عملي للذكاء الاصطناعي المحلي لتطوير البرمجيات على MacBook Pro بذاكرة موحدة تبلغ 16 GB. في ذلك الوقت، كانت الذاكرة تؤثر في معظم قراراتي. جربت نماذج أصغر، وكنت حريصاً في تحديد حجم الـ Context، وبحثت عن تركيبة توفر قدرة جيدة على التعامل مع مهام البرمجة مع إبقاء مساحة كافية للـ IDE والـ Containers والمتصفح وبقية بيئة التطوير.

    ← اقرأ المزيد
  • القيادة التقنية: امنح الاستقلالية إطارا زمنياً

    القيادة التقنية: امنح الاستقلالية إطارا زمنياً

    ملخص الاستقلالية تنجح عندما يحمل الفريق قرار التنفيذ ويحافظ القائد على وضوح النتيجة والقيود وموعد التقييم.

    لاحظت أن إعطاء الفريق مساحة لاتخاذ القرار قد يتحول بسرعة إلى حالة من الغموض إذا بقيت النتيجة المتوقعة وموعد التقييم غير محددين بوضوح.

    ← اقرأ المزيد
  • مجموعتي المحلية لأدوات البرمجة بالذكاء الاصطناعي: كيف أحافظ على سرعة الوكلاء وكفاءة استهلاك الرموز

    مجموعتي المحلية لأدوات البرمجة بالذكاء الاصطناعي: كيف أحافظ على سرعة الوكلاء وكفاءة استهلاك الرموز

    ملخص كيف أعمل على تحسين البيئة المحيطة بوكلاء البرمجة لتقليل هدر الرموز والحفاظ على كفاءة الجلسات.

    أصبح وكلاء البرمجة المدعومون بالذكاء الاصطناعي جزءاً أساسياً من سير عملي اليومي. أستخدم OpenCode و Claude Code لإنجاز مهام متنوعة: بدءاً من استكشاف المشاريع البرمجية الجديدة وتحليل الأخطاء، وصولاً إلى تنفيذ التغييرات، مراجعة الكود، ومعالجة الأسئلة المعمارية.

    ← اقرأ المزيد
  • ngrx-graph: التحليل الاستاتيكي ورسم المخططات البيانية لتطبيقات NgRx

    ngrx-graph: التحليل الاستاتيكي ورسم المخططات البيانية لتطبيقات NgRx

    ملخص تقوم أداة ngrx-graph بفحص مشاريع NgRx عبر تحليل شجرة الإعراب البرمجية (AST)، وحل الأسماء المستعارة والأفعال المتداخلة، ثم إنتاج مخططات تدفق مسار العمليات بصيغة DOT/SVG. أمر واحد يغنيك عن ساعات من تتبع الكود يدوياً.

    إذا قمت يوماً بتتبع تدفق حدث (Action) عبر كود NgRx واسع النطاق، متسائلاً أي Effect يستمع إليه، وأي Reducer يعالجه، وما إذا كان هناك Effect آخر يطلق حركياً حدثاً آخر في السلسلة، فأنت تعرف حجم المعاناة. التتبع اليدوي يعمل حتى يصل إلى حائط مسدود. استدعاء واحد مفقود لـ dispatch() مدفون داخل mergeMap كفيل بتدمير تصورك الذهني للكود.

    ← اقرأ المزيد
  • كيف أُعدّ Cloudflare لموقعي

    كيف أُعدّ Cloudflare لموقعي

    ملخص مراجعة منهجية لكل إعداد في خطة Cloudflare المجانية، ما يبقى مفعّلاً، ما يُعطّل، والمبدأات وراء كل قرار.

    افتح لوحة تحكم Cloudflare الخاصة بك اليوم وستجد العشرات من الميزات لتحسين الأداء والأمان والموثوقية. يتم تمكين بعضها بشكل افتراضي، ويوصى بالبعض الآخر، وتظهر الإمكانات الجديدة بانتظام مع تطور النظام الأساسي. مع وجود العديد من الخيارات المتاحة، أردت أن أفهم بشكل أفضل كيفية مساهمة كل إعداد في موقع الويب الخاص بي.

    ← اقرأ المزيد
  • كيف يعمل هذا الموقع: نظرة تقنية على البنية التقنية (Stack)

    كيف يعمل هذا الموقع: نظرة تقنية على البنية التقنية (Stack)

    ملخص شرح فني كامل لكيفية بناء هذا الموقع, من خط أنابيب المحتوى Bun + Astro إلى نشر Cloudflare والجافاسكريبت الدنيا والتحسينات الأدائية.

    في مقال مرافق، كتبت عن سبب إعادة بناء هذا الموقع باستخدام Astro وكيف نمت تلك القرارة إلى مشروع أكبر بكثير. ذلك المقال تحدّث عن الرحلة والتفكير. هذا المقال يتحدث عن النتيجة: كيف يعمل الموقع فعلاً، من مرحلة كتابة المقال حتى ظهوره في متصفح القارئ.

    ← اقرأ المزيد
  • محادثة غداء غيّرت موقعي

    محادثة غداء غيّرت موقعي

    ملخص كيف أدى نقاش عشوائي أثناء الغداء إلى إعادة بناء هذا الموقع باستخدام Astro وتحديث التقنيات بالكامل وإعادة التفكير فيه كورشة رقمية شخصية بدلاً من محفظة تقليدية.

    لقد بدأت بعض أكثر المشاريع متعةً بالنسبة لي في لحظات عادية بشكل مدهش؛ فقد تكون محادثةً تطرح فكرة جديدة، أو مشاركةً لتجربة عملية من قِبل شخص آخر، أو مصادفةً لطريقة مختلفة في التعامل مع مشكلة مألوفة. تنتهي المحادثة ويعود الجميع إلى أعمالهم اليومية، لكن فكرة صغيرة تظل عالقة في ذهني. ومع مرور الأيام، تنمو تلك الفكرة ببطء لتتحول إلى وثائق وملاحظات وتجارب، وأحياناً إلى مشروع جديد كلياً. وعند النظر إلى الوراء، أجد أن العديد من تجارب التعلم المفضلة لدي تعود إلى لحظات كهذه تماماً، وقد كانت عملية إعادة بناء موقعي الشخصي واحدة من تلك الرحلات غير المتوقعة.

    ← اقرأ المزيد
  • كيف أستخدم Angular AI في المشاريع الحقيقية

    كيف أستخدم Angular AI في المشاريع الحقيقية

    ملخص أدوات الذكاء الاصطناعي جيدة في توليد الكود، لكن المشاريع الحقيقية في Angular تنجح فقط عندما تعطيها سياق المشروع الغني وحدود الهندسة المعمارية والاصطلاحات.

    يمكن للذكاء الاصطناعي إنشاء مكوّن جديد، أو كتابة اختبار، أو شرح خطأ في المترجم. لكن في المشاريع الحقيقية تعتمد جودة النتائج على فهم سياق المشروع أكثر من اعتمادها على قدرات النموذج نفسه. فهو لا يعرف معمارية مشروعك، ولا أسلوب فريقك، ولا الحدود التي بُنيت عبر سنوات من التطوير.

    ← اقرأ المزيد
  • كل كاميرا تحكي حكاية

    كل كاميرا تحكي حكاية

    ملخص تأمل شخصي حول كيف تشكل الكاميرات تصويرنا وإبداعنا والقصص التي نختار روايتها من خلال الصور.

    بين الحين والآخر، أجد نفسي أتصفح كاميرات جديدة. أفتح مراجعة جديدة، أو أقارن ورقة مواصفات أخرى، أو أشاهد مصوّراً يشرح لماذا كاميرا هذا العام أفضل من كاميرا العام الماضي. يبدأ الأمر دائماً بفضول بسيط، وقبل أن أدرك، تمر ساعات. في مكان ما بين فيديوهات المقارنات ومنتديات التصوير وإعلانات الكاميرات المستعملة، أجد نفسي أتخيل كيف سيكون الأمر لو امتلكت كاميرا مختلفة.

    ← اقرأ المزيد
  • تسع سنوات على GitHub Pages، لماذا انتقلت أخيراً إلى Cloudflare

    تسع سنوات على GitHub Pages، لماذا انتقلت أخيراً إلى Cloudflare

    ملخص لماذا قمت بترحيل هذا الموقع من GitHub Pages إلى Cloudflare بعد ما يقرب من عقد، بما في ذلك عملية الترحيل والتحديات والمقايضات المكتشفة.

    لمدة تسع سنوات تقريباً، كان موقعي على GitHub Pages. مجاني، موثوق، بلا صيانة تقريباً. فما سبب الترحيل إلى Cloudflare Pages؟ هذا المقال يشرح الدافع وراء التغيير، كيف تم الترحيل، المشكلات التي ظهرت، والمقايضات التي اكتشفتها على طول الطريق.

    ← اقرأ المزيد
  • الذكاء الاصطناعي المحلي على MacBook Pro بسعة 16 جيجابايت RAM: ما يعمل فعلاً

    ملخص دليل عملي لتشغيل مساعدي البرمجة بالذكاء الاصطناعي محلياً على MacBook Pro M1 بسعة 16 جيجابايت, ما يعمل جيداً وما لا يعمل والمقايضات الحقيقية في الإعداد.

    مساعدي البرمجة بالذكاء الاصطناعي محلياً فكرة جذابة: لا تكاليف API، الكود يبقى على جهازك، وتجربة مشابهة لـ Claude Code مجاناً. لكن تشغيله بشكل جيد على MacBook Pro M1 بسعة 16 جيجابايت RAM يحتاج تجربة وخطأ أكثر مما تعترف به معظم الأدلة.

    ← اقرأ المزيد
  • أدوات التطوير الأساسية: إعداد Brewfile الخاص بي

    ملخص قائمتي المنسقة لأدوات التطوير الأساسية على macOS عبر Homebrew التي تعزز الإنتاجية اليومية ومتعة سير العمل بشكل كبير.

    كمهندس برمجيات، مجموعة أدواتك تشكل طريقة عملك وما يمكنك تحقيقه. مع الوقت، جمعت مجموعة أدوات أساسية تزيد إنتاجيتي وتجعل التطوير أكثر متعة. هذه تفصيل إعداد Homebrew الخاص بي مع الأدوات التي أستخدمها يومياً.

    ← اقرأ المزيد
  • محفظة, متتبع محفظة شخصية خفيفة

    ملخص يشرح هذا المنشور تصميم وتنفيذ متتبع محفظة شخصي بسيط قائم على المتصفح باستخدام React و TypeScript و Vite بما في ذلك المتطلبات والتحديات والحلول لإدارة الحالة والتخزين المؤقت والمخططات.

    هذا المنشور يشرح تصميم وتنفيذ متتبع محفظة browser-first صغير بنيته. التركيز على المتطلبات، التحديات التي واجهتها، وكيف يعالجها الحل النهائي، مع مقاطع كود توضح معالجة الحالة، التخزين المؤقت، والتفاعل مع الرسوم البيانية.

    ← اقرأ المزيد
  • إتقان أوامر Git: دليل عملي

    ملخص مجموعة عملية من أوامر Git الأساسية التي تساعد المطورين على تتبع التغييرات بشكل أفضل والتعاون بسلاسة وإدارة تاريخ المشروع بثقة.

    Git أداة لا غنى عنها للتحكم في الإصدارات: تتبع التغييرات، تعاون فعال، إدارة سجل المشروع. قدراته واسعة، لكن فهم الأوامر الرئيسية يبسط سير عملك بشكل كبير. هذا المقال يتعمق في مجموعة مختارة من أوامر Git العملية، ويشرح ما تفعله، كيف تستخدمها، ومتى تكون أكثر فعالية.

    ← اقرأ المزيد
  • أنجولار - Content Projection

    ملخص يتيح Content Projection في Angular مكونات مرنة وقابلة لإعادة الاستخدام من خلال السماح بإدراج المحتوى من المكونات الأصلية إلى المكونات الفرعية.

    Content Projection في Angular تتيح إدراج مكون داخل مكون آخر. هذا يغير كيفية تصميم مطور Angular لتطبيقه أو مكتبته نحو مكونات مرنة وقابلة لإعادة الاستخدام، وهي حد أعود إليه عند تشغيل Angular AI في مشاريع حقيقية.

    ← اقرأ المزيد
  • ReactJS: المصفوفات في JSX

    ملخص نصيحة سريعة حول استخدام map للمصفوفات في JavaScript لعرض قوائم ديناميكية من العناصر في JSX بدلاً من الترميز الثابت للمكونات المتكررة لكود React أنظف وقابل للصيانة كما هو موضح في مثال لوحة Tic Tac Toe.

    عندما جربت دليل ReactJS البرنامج التعليمي قبل بضعة أشهر، لاحظت أن في كود البداية الرسمي، كانوا يكررون نفس العناصر div في طريقة render(). في حالة تغيير المصدر، سأذكره هنا:

    ← اقرأ المزيد
  • Fetch باستخدام Gitlab API

    ملخص سكريبت Python يستخدم GitLab API مع توكن خاص لاستنساخ أو جلب جميع المستودعات المتاحة تلقائياً مع التعامل مع التكوين عبر JSON وتوفير نسختين باستخدام argparse وملف التكوين للراحة.

    أستخدم gitlab، ولدي العديد من المستودعات التي أحتاج إلى تتبعها يومياً، أو حتى أكثر من مرة في اليوم. وجدت ذلك متعباً جداً أولاً لاستنساخ جميع تلك المستودعات عندما أغير جهاز العمل، ثم الحفاظ على جميع هذه المستودعات محدّثة. لهذا السبب بدأت في كتابة سكربت لأتمتة المهام المملة عن كتفي.

    ← اقرأ المزيد
  • PyConDe & PyData 2019

    ملخص ملخص يوميات شخصي لحضور PyConDE و PyData 2019 في برلين يغطي الكلمات الرئيسية والمحاضرات والدروس وأيام السبرنت والنقاط البارزة الشخصية مثل لقاء المطورين الأساسيين والمساهمة في Bokeh.

    لقد عادلت للتو من PyConDe & PyData-2019، وأريد مشاركة/توثيق تجربتي هناك. هذا أقرب إلى يوميات منه مدونة، حيث أتحدث عن:

    ← اقرأ المزيد
  • سلسلة RxJS - المراقبون

    ملخص مقدمة في RxJS Observables تغطي المفاهيم الأساسية لـ Observer و Subscriber وكيفية إنشائها من الصفر أو باستخدام الطرق الثابتة المفيدة مثل of و range و interval و timer و from و fromEvent و create مع أمثلة كود عملية.

    RxJS (على Github) هو مكتبة للبرمجة التفاعلية لـ Javascript، وفي هذه السلسلة، أود أن أشارككم طريقة تعلمي لها.

    ← اقرأ المزيد
  • Webdrivers مخصصة لـ Selenium باستخدام المُزخرفات

    ملخص تعلم كيفية إنشاء فئات WebDriver مخصصة ديناميكياً لإصدارات مختلفة من المتصفحات باستخدام decorators في Python ومصانع الفئات حتى تتمكن من تشغيل الاختبارات مع عدة ثنائيات Firefox و Chrome بالتوازي.

    كيفية إنشاء فئات webdriver selenium مخصصة بشكل ديناميكي مع مسار ثنائي للمتصفح مُعامَل؟

    ← اقرأ المزيد
  • ترقية Fedora23 (الملف الشخصي غير المُوسم)

    ملخص حل سريع لمشكلة تسمية SELinux التي تحدث بعد الترقية إلى Fedora 23 أو 24 حيث يصبح دليل المنزل غير مصنف مما يمنع تسجيل الدخول, فقط نفذ sudo restorecon -R /home لاستعادة الأذونات الصحيحة.

    عندما حاولت التحديث من fedora23 إلى fedora24، واجهت مشكلة أن مجلد home فقد تسميته:

    ← اقرأ المزيد
  • تجميع Vim من الكود المصدري

    ملخص دليل خطوة بخطوة وسكريبت باش لبناء أحدث إصدار من Vim من المصدر على Fedora مع تمكين الميزات الكبيرة بما في ذلك دعم Python3 و Ruby و Lua و Perl والواجهة الرسومية للوظائف الكاملة.

    كثيراً عندما أريد استخدام vim الموجود في المستودع الرئيسي لأي توزيعة Linux، أجد أنه يفتقر إلى نوع من الدعم، سواء كان python أو وضع العميل-الخادم، أو أي ميزة أخرى. ولذلك يجب علي تجميعه يدوياً من الكود المصدري وتثبيته. وثّقت الإعداد الناتج خطوة بخطوة في مغامرة vimrc.

    ← اقرأ المزيد
  • إعداد ذراع روبوت Lwa4p

    ملخص دليل خطوة بخطوة مع سكريبت باش لإعداد ذراع الروبوت Schunk LWA4P على ROS Indigo باستخدام بطاقة CAN ESD بما في ذلك تكوين واجهة CAN وتكامل MoveIt ونصائح استكشاف الأخطاء لتهيئة الذراع وتحريكها.

    خلال تجاربي مع ذراع روبوت Powerball Lightweight lwa4p من Schunk، واجهت صعوبات كثيرة لتحريكها باستخدام moveit. في هذه المقالة أشارك هذه التجربة.

    ← اقرأ المزيد
  • مغامرة عبر vimrc الخاص بي (nvimrc)

    ملخص جولة مفصلة في الإعدادات والخرائط والتخصيصات المفيدة في ملف vimrc/init.vim للمؤلف تغطي الإعدادات العامة والإضافات وشريط الحالة وحيل تعزيز الإنتاجية لـ Vim و Neovim.

    في هذه المقالة، سآخذكم في مغامرة في ملفي vimrc السابق وملفي الحالي init.vim الذي جمعته خلال السنوات الأخيرة من استخدام vim ثم neovim. سأشرح الميزة أو الوظيفة، ثم أدرج التكوينات أو الكود الذي يجب إدراجه في ملف vimrc (init.vim) لتفعيل هذه الميزة.

    ← اقرأ المزيد
  • OpenCV على OpenShift

    ملخص يقدم هذا المنشور سكريبت باش وتعليمات خطوة بخطوة لتثبيت OpenCV بنجاح في Python 2.7 cartridge على OpenShift Online مع تجاوز قيود الحصة الصارمة 1 جيجابايت.

    عندما أردت تثبيت opencv على كارtridge python-2.7 الخاص بـ openshift online واجهت مشكلة الحد من الحصة إلى 1 جيجابايت.

    ← اقرأ المزيد