<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>مدونة عمار الخوالده</title><link>https://ammar.dev/</link><description>Recent content on مدونة عمار الخوالده</description><generator>Hugo</generator><language>ar</language><lastBuildDate>Sat, 05 Sep 2026 15:24:00 +0300</lastBuildDate><atom:link href="https://ammar.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>متى لا تكون تعابير Regex كافية لتحليل النصوص؟</title><link>https://ammar.dev/snippets/when-regex-is-not-enough/</link><pubDate>Sun, 16 Aug 2026 22:35:00 +0300</pubDate><guid>https://ammar.dev/snippets/when-regex-is-not-enough/</guid><description>&lt;p&gt;كتبت سابقا مقالا تفاعليا يشرح Regex:
&lt;a href="https://ammar.dev/regex-introduction/"&gt;مقدمة في تعلم Regex&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;شرحت فيه عدة أمثلة للمُطابقة (Matching) لكن ما لم يُذكر في المقال أن Regex يفشل أحيانا في معالجة بعض النصوص.&lt;/p&gt;
&lt;p&gt;هذه القصاصة تعطي أمثلة على حالات لا يصلح فيها Regex لتحليل النصوص.&lt;/p&gt;
&lt;h2 id="التكرار-والتداخل-recursion"&gt;التكرار والتداخل Recursion&lt;/h2&gt;
&lt;p&gt;هذا النمط من المقال يُطابق بعض الـ HTML Tags:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="syntax-re" data-lang="re"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"&gt;1&lt;/span&gt;&lt;span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;lt;(&lt;/span&gt;strong&lt;span style="color:#ff7b72;font-weight:bold"&gt;|&lt;/span&gt;b&lt;span style="color:#ff7b72;font-weight:bold"&gt;)&amp;gt;(?&amp;lt;&lt;/span&gt;tag_content&lt;span style="color:#ff7b72;font-weight:bold"&gt;&amp;gt;.*)&amp;lt;&lt;/span&gt;&lt;span style="color:#f85149"&gt;\&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;/&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;(&lt;/span&gt;strong&lt;span style="color:#ff7b72;font-weight:bold"&gt;|&lt;/span&gt;b&lt;span style="color:#ff7b72;font-weight:bold"&gt;)&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;لكن بالنظر إلى الى النص الآتي:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="syntax-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681"&gt;1&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#7ee787"&gt;strong&lt;/span&gt;&amp;gt;Test &amp;lt;&lt;span style="color:#7ee787"&gt;b&lt;/span&gt;&amp;gt;Bold&amp;lt;/&lt;span style="color:#7ee787"&gt;b&lt;/span&gt;&amp;gt; text&amp;lt;/&lt;span style="color:#7ee787"&gt;strong&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;سيتم مطابقة &lt;code&gt;&amp;lt;strong&amp;gt;&lt;/code&gt; و &lt;code&gt;&amp;lt;/strong&amp;gt;&lt;/code&gt; لكن &lt;code&gt;Test &amp;lt;b&amp;gt;Bold&amp;lt;/b&amp;gt; text&lt;/code&gt; ستُطابق كمجموعة واحدة تحت اسم &lt;code&gt;tag_content&lt;/code&gt;.
عند معالجة نمط معين، حيث يمكن لهذا النمط أن يحتوي على نفسه مرة أخرى (كوجود HTML tag داخل HTML tag آخر) فإن Regex يفشل في مطابقتها.&lt;/p&gt;</description></item><item><title>متى تتجنب استخدام الـ Average لقياس أداء الانظمة</title><link>https://ammar.dev/snippets/when-to-use-percentiles-instead-of-avg/</link><pubDate>Sun, 09 Aug 2026 22:00:00 +0300</pubDate><guid>https://ammar.dev/snippets/when-to-use-percentiles-instead-of-avg/</guid><description>&lt;p&gt;كثيرا ما يُستخدم المتوسط الحسابي (Average/Mean) عند مراقبة الأنظمة لتجميع القيّم وأخذ فكرة عامة عنها لكنه ليس أنسب عملية لتجميع البيانات دائما فهو لا يعطي صورة دقيقة عن الأداء.&lt;/p&gt;
&lt;h2 id="مثال-على-قياس-api-latency"&gt;مثال على قياس API Latency&lt;/h2&gt;
&lt;p&gt;لإعطاء مثال على ذلك، سنفترض أننا نقيس API Latency لأحد الأنظمة، الشكل الآتي يوضح الـ Latency لكل request (بدون أي حسابات إضافية، اعتبر ان كل نقطة على محور x هي request مختلفة):&lt;/p&gt;
&lt;p&gt;&lt;canvas id="latency-chart"&gt;&lt;/canvas&gt;&lt;/p&gt;
&lt;script src="https://cdn.jsdelivr.net/npm/chart.js"&gt;&lt;/script&gt;
&lt;script&gt;
 new Chart(document.getElementById('latency-chart'), {
 type: 'bar',
 data: {
 labels: Array.from({length: 25}, (_, i) =&gt; i + 1),
 datasets: [{
 label: 'Latency (ms)',
 data: [120, 186, 114, 931, 124, 170, 903, 642, 213, 534, 212, 111, 913, 107, 5231, 231, 433, 235, 2455, 421, 823, 450, 723, 98, 1021
]
 }]
 },
 options: {
 scales: {
 x: { display: false },
 y: { title: { display: true, text: 'Latency (ms)' } }
 },
 plugins: {
 legend: { display: false },
 title: { display: true, text: 'API Latency Per Request', font: { size: 16 } }
 }
 }
 });
&lt;/script&gt;
&lt;p&gt;نلاحظ من الرسم البياني أن الـ Requests متباينة في السرعة، فبعضها سريع جدا والآخر بطيء جدا، وبينهما تقع كثير من البيانات.&lt;/p&gt;</description></item><item><title>نظرة على الـ DNS كنقطة انهيار في الأنظمة</title><link>https://ammar.dev/an-overview-of-dns-as-a-failure-point/</link><pubDate>Sat, 20 Jun 2026 15:10:00 +0300</pubDate><guid>https://ammar.dev/an-overview-of-dns-as-a-failure-point/</guid><description>يناقش المقال بعض مشاكل الـ DNS التي قد تتسبب في أعطال تمنع الوصول للأنظمة مع مناقشة الحلول الممكنة</description></item><item><title>نظرة في الـ Infrastructure as Code - IaC</title><link>https://ammar.dev/snippets/infrastructure-as-code-iac-overview/</link><pubDate>Tue, 14 Apr 2026 00:51:00 +0300</pubDate><guid>https://ammar.dev/snippets/infrastructure-as-code-iac-overview/</guid><description>&lt;p&gt;البنية التحتية (Infrastructure) هي مجموع المكونات والموارد التي تعمل معا كقاعدة لتشغيل مشروعك، كالسيرفرات المطلوبة للتشغيل أو لتخزين البيانات، والشبكات والـ IPs وإعداداتها، أو الـ Domains وإعدادات الـ DNS وغيرها.&lt;/p&gt;
&lt;p&gt;كل جزء من أجزاء الـ Infrastructure تحصل عليه من أحد مزودي الخدمة، وإدارة هذه الموارد أو المكونات تتم عادة بالدخول إلى لوحة تحكم خاصة بكل مزود خدمة وإنشاء الموارد أو تعديلها.&lt;/p&gt;
&lt;p&gt;فأدخل مثلا إلى لوحة تحكم مزود خدمة السيرفرات لإنشاء بعض السيرفرات والـ Firewalls وإعدادات الشبكة فيما بينها، ثم أدخل إلى مزود خدمة الـ DNS لتعديل إعدادات الـ DNS، ثم إلى مزود خدمة الإيميلات والـ SMTP&amp;hellip; وهكذا&lt;/p&gt;</description></item><item><title>خصائص ACID: ضمانات قواعد البيانات</title><link>https://ammar.dev/acid-properties/</link><pubDate>Sat, 07 Feb 2026 23:00:00 +0300</pubDate><guid>https://ammar.dev/acid-properties/</guid><description>فهم الضمانات والأدوات التي توفرها قواعد البيانات لتجنب التلف - موازنة بين صحة البيانات والأداء.</description></item><item><title>ما هو الـ Transaction في قواعد البيانات؟</title><link>https://ammar.dev/snippets/database-transaction/</link><pubDate>Sat, 31 Jan 2026 21:51:00 +0300</pubDate><guid>https://ammar.dev/snippets/database-transaction/</guid><description>الـ Transaction: تنفيذ مجموعة من الـ Queries على قاعدة البيانات كوحدة واحدة - Single Unit of Work</description></item><item><title>مشاكل قياس الوقت أو المدة - Monotonic Clock</title><link>https://ammar.dev/snippets/monotonic-time/</link><pubDate>Sun, 28 Dec 2025 22:00:00 +0300</pubDate><guid>https://ammar.dev/snippets/monotonic-time/</guid><description>مشاكل قياس المدة باستخدام وقت نظام التشغيل وكيف تحل الـ Monotonic Clock المشكلة.</description></item><item><title>طرق تخزين جداول قواعد البيانات: Row-oriented vs Column-oriented</title><link>https://ammar.dev/snippets/row-vs-column-oriented-databases/</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate><guid>https://ammar.dev/snippets/row-vs-column-oriented-databases/</guid><description>&lt;p&gt;تنقسم قواعد البيانات من حيث طريقة تخزين البيانات على مستوى الجداول إلى نوعين:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Row-oriented Database&lt;/li&gt;
&lt;li&gt;Column-oriented Database&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;هذا التقسيم متعلق بآلية التخزين في الـ Storage System.&lt;/p&gt;
&lt;h2 id="التخزين-في-الـ-row-oriented-databases"&gt;التخزين في الـ Row-Oriented Databases&lt;/h2&gt;
&lt;p&gt;يتم تخزين القيم الخاصة بنفس الـ Entity على صف واحد بحيث تكون كلها متتالية، وهذا هو الافتراضي في قواعد البيانات المعروفة كـ PostgreSQL و SQLite.&lt;/p&gt;
&lt;figure class="db-row-vs-col-card not-prose"&gt;
 &lt;div class="card-header"&gt;
 &lt;div class="icon-container icon-blue"&gt;
 &lt;svg class="icon icon-blue" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;rect x="3" y="3" width="7" height="7"&gt;&lt;/rect&gt;
 &lt;rect x="14" y="3" width="7" height="7"&gt;&lt;/rect&gt;
 &lt;rect x="14" y="14" width="7" height="7"&gt;&lt;/rect&gt;
 &lt;rect x="3" y="14" width="7" height="7"&gt;&lt;/rect&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;div class="header-text"&gt;
 &lt;figcaption&gt;Row-Oriented Databases&lt;/figcaption&gt;
 &lt;p&gt;أنظمة قواعد البيانات التقليدية (PostgreSQL, MySQL) - OLTP&lt;/p&gt;</description></item><item><title>الـ Interfaces والـ Sockets: الشبكة من الـ Hardware إلى الـ Software</title><link>https://ammar.dev/network-interfaces-and-sockets/</link><pubDate>Thu, 28 Mar 2024 01:20:00 +0300</pubDate><guid>https://ammar.dev/network-interfaces-and-sockets/</guid><description>مقال يشرح بعض المفاهيم مثل الـ Network Interfaces في نظام التشغيل وارتباطها بالـ Hardware، وبرمجة الـ Sockets.</description></item><item><title> سجل الاستعلامات البطيئة - Slow Query Log</title><link>https://ammar.dev/snippets/slow-query-logs/</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate><guid>https://ammar.dev/snippets/slow-query-logs/</guid><description>&lt;p&gt;من الإعدادات المفيدة في MariaDB / MySQL، هي إعدادات الـ Slow Query Log،&lt;/p&gt;
&lt;p&gt;وهي من الطرق التي تستخدم (بدون أدوات مراقبة خارجية) لمعرفة الـ Queries البطيئة في قاعدة البيانات،&lt;/p&gt;
&lt;p&gt;يمكنك تحديد عدد الثواني التي إذا تجاوزها وقت تشغيل الـ Query يعتبر بطيئا.&lt;/p&gt;
&lt;p&gt;



 
 
 
 


&lt;figure&gt;
 &lt;img src="https://ammar.dev/snippets/slow-query-logs/slow_query_log_settings_hu_6c06e36bc864d1e7.webp" alt="خيارات تفعيل الـ Slow Query Log"loading="lazy"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;توجد العديد من الإعدادات الأخرى كتحديد مسار الملف الخاص بالـ Log، أو بعض الشروط الإضافية التي يجب أن ينطبق حتى يتم تسجيل الـ Query على أنه بطيء&lt;/p&gt;</description></item><item><title>مقدمة في شبكات الحاسوب - Computer Networking</title><link>https://ammar.dev/computer-networking-introduction/</link><pubDate>Sun, 24 Dec 2023 16:00:00 +0300</pubDate><guid>https://ammar.dev/computer-networking-introduction/</guid><description>مقدمة مبسطة في شبكات الحاسوب ومكوناتها مع شرح الـ OSI Layers.</description></item><item><title>Server Sent Events (SSE)</title><link>https://ammar.dev/snippets/http-server-sent-event/</link><pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate><guid>https://ammar.dev/snippets/http-server-sent-event/</guid><description>&lt;p&gt;بروتوكول HTTP يستخدم Request-Response model، مما يعني أن السيرفر لا يستطيع إرسال بيانات إلى الـ Client ما لم يقم الـ Client أولا بإرسال Request.&lt;/p&gt;
&lt;p&gt;



 
 
 
 


&lt;figure&gt;
 &lt;img src="https://ammar.dev/snippets/http-server-sent-event/sse-server-sent-event_hu_98c57ef8c7c7eade.webp"loading="lazy"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;لكن يمكن استخدام SSE (Server Sent Events) لإرسال البيانات من السيرفر للـ Client، لا يزال الـ Client بحاجة إلى إرسال Request أولا،
لكن يتم استخدام Keep-Alive لإبقاء الاتصال مفتوحا، والسيرفر سيرسل البيانات دون انهاء الـ Response، في الصورة السابقة تجد أنه قد تم إرسال أكثر من رسالة من السيرفر إلى الـ Client في أوقات مختلفة، كلها تعتبر Response واحدة لكن تم تقسيما وإرسالها بالتدريج،&lt;/p&gt;</description></item><item><title>شرح برمجة Package لـ PHP ورفعها على Packagist</title><link>https://ammar.dev/php-packages-development/</link><pubDate>Sat, 26 Aug 2023 15:30:00 +0300</pubDate><guid>https://ammar.dev/php-packages-development/</guid><description>هذا المقال يشرح طريقة برمجة Package قابلة للتثبيت من خلال Composer لاعادة استخدامها في أكثر من مشروع</description></item><item><title>الحفاظ على الاتصال بين HTTP 1.0 و HTTP 1.1</title><link>https://ammar.dev/snippets/http-keep-alive/</link><pubDate>Fri, 18 Aug 2023 00:00:00 +0000</pubDate><guid>https://ammar.dev/snippets/http-keep-alive/</guid><description>&lt;p&gt;اقوم اليوم ببعض التجارب المتعلقة ببروتوكول HTTP لفهمه بشكل أعمق،&lt;/p&gt;
&lt;p&gt;حاولت إرسال الـ Request باستخدام netcat عبر TCP مباشرة دون استخدام HTTP Client.&lt;/p&gt;
&lt;p&gt;الصورة المرفقة توضح الفرق بين نسخة HTTP 1.0 و HTTP 1.1.&lt;/p&gt;
&lt;p&gt;



 
 
 
 


&lt;figure&gt;
 &lt;img src="https://ammar.dev/snippets/http-keep-alive/1_http1.0_vs_http1.1_raw_request_hu_c5b872467b360549.webp" alt="HTTP 1.0 vs HTTP 1.1 raw request"loading="lazy"
 &gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;في النسخة 1.0 ستضطر لإرسال كل HTTP Request باتصال TCP جديد،
بينما في النسخة 1.1، يمكن إرسال أكثر من HTTP Request على نفس الاتصال مما يزيد من سرعة العملية (ستختصر الوقت والموارد اللازمة لفتح اتصال جديد).&lt;/p&gt;</description></item><item><title>مقدمة في تعلم Regex</title><link>https://ammar.dev/regex-introduction/</link><pubDate>Sat, 10 Jun 2023 18:30:00 +0300</pubDate><guid>https://ammar.dev/regex-introduction/</guid><description>مقال يشرح كتابة تعابير Regex باستخدام أمثلة تفاعلية يمكن تعديلها من داخل المقال</description></item><item><title>إدارة تشغيل الـ Containers باستخدام Docker Compose</title><link>https://ammar.dev/docker-basics/manging-multiple-containers-using-docker-compose/</link><pubDate>Sat, 25 Feb 2023 17:17:11 +0300</pubDate><guid>https://ammar.dev/docker-basics/manging-multiple-containers-using-docker-compose/</guid><description>في هذا المقال نتعرف على أداة Docker Compose التي تساعدنا في إدارة تشغيل الـ Containers</description></item><item><title>التواصل بين الـ Containers عبر الشبكة - Docker Networking</title><link>https://ammar.dev/docker-basics/docker-networking-introduction/</link><pubDate>Sat, 18 Feb 2023 16:49:58 +0300</pubDate><guid>https://ammar.dev/docker-basics/docker-networking-introduction/</guid><description>هذا المقال يشرح مفاهيم الشبكات في Docker عن طريق مثال عملي بتشغيل أكثر من Container والاتصال بينها عبر الشبكة</description></item><item><title>التعامل مع الحاويات التي تعمل في الخلفية - Detached Containers</title><link>https://ammar.dev/docker-basics/working-with-detached-containers/</link><pubDate>Sun, 12 Feb 2023 12:16:21 +0300</pubDate><guid>https://ammar.dev/docker-basics/working-with-detached-containers/</guid><description>هذا المقال يشرح طريقة العمل مع الحاويات التي تعمل في الخلفية background وكيفية مراقبة الأخطاء فيها</description></item><item><title>شرح الـ Port Binding مع مثال على تشغيل Web Server بسيط</title><link>https://ammar.dev/docker-basics/port-binding-with-php-webserver-example/</link><pubDate>Sat, 04 Feb 2023 14:17:52 +0300</pubDate><guid>https://ammar.dev/docker-basics/port-binding-with-php-webserver-example/</guid><description>شرح مفهوم الـ Port Binding مع مثال عملي على تشغيل PHP Script على Web Server بسيط</description></item><item><title>مفهوم الـ Volumes في Docker مع مثال على استخدام PHP CLI</title><link>https://ammar.dev/docker-basics/docker-volumes-with-php-cli-example/</link><pubDate>Sat, 28 Jan 2023 15:36:39 +0300</pubDate><guid>https://ammar.dev/docker-basics/docker-volumes-with-php-cli-example/</guid><description>هذا المقال يشرح مفهوم الـ Volume للحفاظ على ملفات الحاوية من الضياع ومشاركة ملفات نظام التشغيل مع الحاوية</description></item><item><title>أساسيات الصور والحاويات - Images and Containers</title><link>https://ammar.dev/docker-basics/docker-series-images-and-containers/</link><pubDate>Sat, 21 Jan 2023 15:48:01 +0300</pubDate><guid>https://ammar.dev/docker-basics/docker-series-images-and-containers/</guid><description>هذا المقال سيشرح مفهوم الصور والحاويات في Docker بشكل نظري، ثم يبدأ بشرح استخدام Docker</description></item><item><title>مقدمة عن أداة Docker وفوائدها وحالات استخدامها</title><link>https://ammar.dev/docker-basics/docker-introduction-and-installation/</link><pubDate>Sat, 14 Jan 2023 17:25:53 +0300</pubDate><guid>https://ammar.dev/docker-basics/docker-introduction-and-installation/</guid><description>هذا الدرس مقدمة لسلسلة مقالات لشرح أساسيات Docker، سنناقش الأسباب التي قد تدفعك لاستخدام Docker.</description></item><item><title>شرح الـ DNS وآلية عمله وبعض تطبيقاته</title><link>https://ammar.dev/what-is-dns-and-how-it-works/</link><pubDate>Mon, 05 Dec 2022 16:41:27 +0300</pubDate><guid>https://ammar.dev/what-is-dns-and-how-it-works/</guid><description>يشرح هذا المقال آلية عمل الـ Domain Name System مع نبذة بسيطة عن بعض تطبيقاته العملية</description></item><item><title>مقدمة إلى إدارة الاعتماديات في PHP باستخدام Composer</title><link>https://ammar.dev/introduction-to-composer-dependency-manager/</link><pubDate>Mon, 14 Nov 2022 17:49:31 +0300</pubDate><guid>https://ammar.dev/introduction-to-composer-dependency-manager/</guid><description>مدير الحزم Composer هو من أهم الأدوات التي يحتاجها كل مبرمج PHP لإدارة حزم البرمجيات بكفاءة، هذا المقال مقدمة لشرح المفاهيم المتعلقة به.</description></item><item><title>شرح مفهوم الـ Reverse Proxy مع بعض تطبيقاته العملية</title><link>https://ammar.dev/reverse-proxy-explaination-with-examples/</link><pubDate>Sun, 30 Oct 2022 17:35:00 +0300</pubDate><guid>https://ammar.dev/reverse-proxy-explaination-with-examples/</guid><description>مقال يشرح مفهوم الـ Reverse Proxy مع إعطاء أمثلة حول استخداماته.</description></item><item><title>حقن الاعتماديات - Dependency Injection</title><link>https://ammar.dev/dependency-injection/</link><pubDate>Sat, 22 Oct 2022 16:38:31 +0000</pubDate><guid>https://ammar.dev/dependency-injection/</guid><description>شرح لمفهوم حقن الاعتماديات (Dependency Injection) وتطبيقه باستخدام لارافل</description></item></channel></rss>