اذهب إلى المحتوى

Entesar Khaled

الأعضاء
  • المساهمات

    1516
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    213

كل منشورات العضو Entesar Khaled

  1. أهلا بك، الأصل وحسب مبادئ هندسة البرمجيات أن هناك عدة خطوات قبل برمجة أي نظام فهناك في البداية مرحلة تحضير المتطلبات (كتابة وثيقة الشروط الخارجية والداخلية) requerments ثم مرحلة التحليل analyse ثم مرحلة التصميم design ثم بعدهم تأتي مرحلة كتابة الكود، هنا شيئ من التفصيل حول المراحل السابقة لمرحلة البرمجة كتابة وثيقة الشروط الخارجية والداخلية (requerments): وثيقة الشروط الخارجية يتم أخذها من الزبون. تحتوي الوثيقة على متطلبات الزبون في ما يخص مواصفات البرنامج الذي يجب إنشاؤه. ثم يتم تحليل المتطلبات بشكل أولي ثم كتابة وثيقة شروط داخلية تحتوي على تفسير المواصفات التي يريدها الزبون بدقة أكبر، وبطريقة تتماشى مع مصطلحات المبرمجين. قد تكون طلبات الزبون متعارضة وفي هذه الحالة يتم الرجوع إليه لتنقيح وثيقة الشروط. ثم يتم تحديد عدد الساعات اللازمة للعمل وحساب التكلفة. التحليل: في هذه العملية تجمع المعلومات بدقة ثم تحدد المتطلبات والمهام التي سيقوم بها البرنامج، وتوصف هذه المهام بدقة تامة، كما تدرس الجدوى المرجوة من البرنامج، فالمستخدم مثلاً يضع تصوراً للبرنامج ليقوم بعمليات معينة، ومهمة مهندس البرمجيات في هذه المرحلة هي استخلاص هذه الأفكار وتحديدها؛ لذلك فهي تتطلب مهارة عالية في التعامل مع الزبائن، وقدرة على التحليل الصحيح. ينتج في نهاية هذه المرحلة وثيقة تدعى جدول الشروط والمواصفات دينامكاميد التصميم: تصميم البرمجيات هي مرحلة من مراحل دورة حياة النظام، تساعدنا في تحديد كيفية حل المشكلة "كيف سنحل المشكلة؟"، والتخطيط للتوصل إلى حلول للمشكلة، والدخول في تفاصيل النظام. التصميم يحدد هيكلية وبنية النظام من خلال تجزأة النظام إلى مجموعة من الأنظمة الفرعية Sub-Systems مما يساهم في السيطرة على التعقيد في النظام System Complexity ، وتحديد الواجهات ونوافذ المستخدم User Interfaces ،والمكونات Components ، والوحدات Modules والبيانات للنظام كي يحقق النظام متطلبات الزبون. ونقوم بمرحلة التصميم باستخدام المتطلبات التي حددناها في مرحلة التحليل. مرحلة التصميم يتم خلالها إيجاد التصميم الأمثل لنظام المعلومات الحاسوبي الذي يلبي احتياجات المستخدمين التي تم توصيفها في مرحلة التحليل. إن عملية التصميم في جوهرها هي عملية حل مشكلات، أي يجري البحث خلالها عن أفضل الحلول التصميمية لبناء نظم ذات أهداف محددة. إن كان النظام بسيط ممكن أن تختصر نوعا ما بتطبيق المراحل السابقة منطقيًا وبرمجيًا... يمكن للمبرمج بكل سههولة تخصيص واجهه مختلفة لكل نوع عضوية والمحافظة على نفس التطبيق لجميع العضويات في النظام مثلًا الأفراد المسجلين كعملاء بواجهه والمسجلين كمقدمين خدمة تُخصص لهم واجهه مختلفة لكن كليهما يستخدم خصائص النظام الوحيد نفسه فقط تختلف الواجهه
  2. أهلًا بك، ستجد شرح وافي جدًا بأمثلة مفصلة بقلم المهندس عبد اللطيف في أكاديمية حسوب بهذا الرابط وأيضًا يمكنك الإطلاع على توثيق العنصر <form> في html في موسوعة حسوب
  3. أهلًا بك، قد جربت هذه الشيفرة البسيطة لتحويل كود الوان hex الي كود الوان rgb وأدت الغرض معي بشكل ممتاز.. ربما تكون أبسط لك إن أردت <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <title>hex to rgba converter</title> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <style> #result { font-size: 20px; font-weight:bold; } </style> </head> <body align="center"> <h1>hex to rgba converter</h1> <form class="form-inline"> <div class="form-group"> <label class="sr-only" for="hexcolor">Hex Color</label> <div class="input-group"> <div class="input-group-addon">#</div> <input type="text" class="form-control" id="hexcolor" placeholder ="Enter Hex"> </div> <div class="input-group"> <div class="input-group-addon">Opacity</div> <input type="number" class="form-control" id="opacity" value="70"> </div> </div> <button type="submit" id="convert" class="btn btn-primary">Convert</button> </form> <div id="result"></div> </body> <script> $(document).ready(function() { $('#convert').click(function() { function hex2rgba_convert(hex,opacity){ hex = hex.replace('#',''); r = parseInt(hex.substring(0,2), 16); g = parseInt(hex.substring(2,4), 16); b = parseInt(hex.substring(4,6), 16); result = 'rgba('+r+','+g+','+b+','+opacity/100+')'; return result; } var color = $('#hexcolor').val(); var opacity = $('#opacity').val(); $('#result').html(hex2rgba_convert(color,opacity)); return false; }); }); </script> </html>
  4. أهلًا بك، يمكن كتابة البرنامج كالتالي using System; public class PrimeNumberExample { public static void Main(string[] args) { int n, i, m=0, flag=0; Console.Write("Enter the Number to check Prime: "); n = int.Parse(Console.ReadLine()); if (n%2==0)Console.Write("Number even \n");else Console.Write("Number is odd \n"); m=n/2; for(i = 2; i <= m; i++) { if(n % i == 0) { Console.Write("Number is not Prime."); flag=1; break; } } if (flag==0) { Console.Write("Number is Prime.\n"); Console.Write("all divisors are: "); printDivisors(n); } } static void printDivisors(int n) { for (int i = 1; i <= n; i++) if (n % i == 0) Console.Write( i + " "); } }
  5. أهلًا مريم، سياسة موقع مستقل تقتضي عدة أمور بناء على أهداف معينة، تحديد عدد العروض ومدة تقييد الأرباح وأمور أخرى تندرج تحت خطة الموقع العامة وينبغي الإلتزام بها... إن كنتي مقدمة على أكثر من 10 وظائف ربما يتم قبولك لأكثر من 2 في نفس الوقت وبهذا ستضطرين لإلغاء إحداهم... حاولى التقديم للوظائف التي تكوني متأكدة 100% أنك ستتمكنين من القيام بها وبالتالي ستجدين ال 10 عروض كافية أرجو أن تتواصلي مع مركز المساعدة مباشرة (فيتم الرد عليكي بالتفاصيل) إن واجهتي مشكلة ما فهذا أفضل وأنسب لكي من مجتمع أكاديمية حسوب
  6. CPA هى اختصار للكلمات cost per action او cost per acquisition اى التكلفة مقابل حدث اكشن اى القيام بعمل او حدث ما اى يقوم المعلن بدفع تكلفة الاعلان عندما يتم فعل او حدث ما وهو الاكشن ما معنى هذا ؟ هناك الكثير من اصحاب المنتجات Advertiser لا يعرفون كيف يقوموا بتسويق المنتج الخاص بهم أو يريدون زيادة عملائهم ولذلك يلجأون الى المسوق الالكترونى publisher – وهو انت الأن – الى مساعدتهم فى عمل ذلك مقابل نسبة معينة من الربح وهى العمولة commission فيقوموا بأنشاء رابط مخصص لة tracking link يقوم بترويجة وحينما تتم عملية شراء من خلالة يحصل على العمولة المتفق عليها ويعرف ذلك بالافيليت affiliate marketingوترى الان ان المعلن دفع هذة العمولة او التكلفة مقابل عملية شراء أى CPS أى cost per sale ولكن صاحب المنتج يمكنة ايضا الاستفادة من العملاء الذى قاموا بالتسجيل فى الموقع ولكن لم يقوموا بعملية الشراء فهو سيحاول التواصل معهم لحين اقناعهم بعملية الشراء ويطلب من المسوق الالكترونى ان يساعدة فقط فى جلب زوار لموقعة يقوموا فقط بالتسجيل فى الموقع ويدفع لك مقابل ذلك وهذة الأن تكلفة مقابل تسجيل أى CPL أو Cost per lead ولكن ايضا لم يقتصر الامر على ذلك بل يريد المساعدة من المسوق الالكترونى ان يجلب لة زوار لتنزيل وتثبيت تطبيقة على الجوال CPI Cost per install او مساعدتة فى الحصول على رقم جوال العميل المحتمل وغيرها من البيانات ويقوم بالدفع لها وتعرف هذة بالحدث أو الاكشن اليك هذا المثال والذى قد يوضح لك الصورة بشكلى عملى نقابلة يوميا نفترض انك تريد شراء جوال جديد وعرفت انة يمكنك الحصول على سعر أفضل بكثير عند الشراء من الانترنت فوجدت فيديو يوتيوب يوضح لك ارخص سعر لهذا الجوال وينصحك بأن تقوم بشراءة من موقع على اكسبريس Aliexpress لانة بالطبع يوفر اقل سعر ممكن واخبرك بأن رابط شراء الجوال فى اسفل وصف الفيديو كما نصحك ايضا ان تقوم بتثبيت تطبيق الجوال لعلى اكسبريس ليمكنك الشراء منة بسهولة بعد ذلك وايضا الرابط اسفل الفيديو فقمت انت بالضغط على الرابط اسفل الفيديو وذهبت الى الموقع وقمت بشراء الهاتف ثم قمت بتثبيت تطبيق على اكسبريس على جوالك وبالطبع صاحب الفيديو هو مشترك فى برنامج التسويق بالعمولة لموقع على اكسبريس وبذلك حصل على العمولة مقابل شرائك – افيليت – وايضا على عمولة مقابل تنزيلك للتطبيق – CPA هذا مثال حقيقى للتسويق بالعمولة و CPA ونقابلة يوميا بأختلاف اشكالة ومع مواقع اخرى كثيرة وهل تعرف صديقى انك لو قمت بالشراء من خلال الربط الموجود فى المثال سأحصل أنا ايضا على عمولة رابط افيليت امثلة اخرى فعالة الان على شبكات CPA هذا العرض موجة الى مصر تحصل منة على 18 سنت عندما يقوم الزائر بأدخال بريدة الالكترونى للبدء فى لعب fortnite وهذا العرض موجة الى السعودية تربح منة 1.01 دولار عن كل زائر يقوم بأدخال رقم جوالة وهذا عرض موجة الى الامارات تربح منة 1.86 دولار عن كل زائر يدخل رقم جوالة وهذا العرض موجة الى المانيا تربح منة 24.12 دولار عن كل زائر يقوم بأدخال رقم جوالة وكما لاحظت انة يمكنك ان تحصل على المال مقابل عملية الشرءا التى تتم من خلالك – الافيليت – او عملية التسجيل او تنزيل تطبيق CPA وبذلك فأن الربح من CPA هو أسهل بكثير من الربح من التسويق بالعمولة لأنك تحتاج فقط الى جلب زوار يقوموا بالتسجيل او عمل حدث او أكشن معين ويجب ان تلاحظ ايضا ان عروض cpa قد تستهدف دولة معينة وايضا جهاز معين من سطح مكتب او جوال ويميز شبكات CPA انها تقوم تلقائيا بتحويل الزائر الى العرض المناسب لدولتة وجهازة مما يضمن لك ارباح اكثر ما هى الاعمال actions المطلوبة؟ ادخال البريد الالكترونى Email/zip submit ادخال رقم الجوال Pin submit استكمال استبيان surveys تحميل برنامج أو اضافة Download تثبيت تطبيق جوال Mobile install التسجيل لنسخة تجريبية من موقع او برنامج Free trial تسجيل بيانات بطاقات الائتمان credit card submit زيارة موقع الكترونى cost per click للمزيد حول الموضوع تابع مصدر _____________________________________________________ أرجو أن توضح قصدك ب F+S !
  7. أهلًا بك، قمت للتو بمتابعة هذا الفيديو ووجدته قد بدأ بشرح الأساسيات value types و reference type بما فيها من أنواع Nullable بشكل واضح ومبسط .. أرجو أن تشاهده وإن استصعبت في فهم أي نقطة أو لم يكن مفيدًا بشكل كافي بالنسبة لك أن تخبرنا بالتوفيق...
  8. أهلًا بك، ستفيدك مقالات موسوعة حسوب جدًا في هذا المجال https://academy.hsoub.com/marketing/
  9. أهلا بك، يمكن أن نفعل ذلك من خلال الخاصية onLoad بوضعها لعنصر body و اسنادها لدالة JS بسيطة جدا... فهنا عند كل تحميل للصفحة أو تحديث ستجد نفسك بنهايتها <html> <body onLoad="pageScroll()"> <div style="margin-top:80%"> Some big text Some big text </div> </body> <script> function pageScroll() { window.scrollBy(0,50); // horizontal and vertical scroll increments scrolldelay = setTimeout(pageScroll(),0); // scrolls that let the page up agin //scrolldelay = setTimeout(pageScroll(),100); // scrolls every 100 milliseconds if u want } </script> <html>
  10. أهلًا بك، أولا عليك أن تقوم بالتأكد من أن المودم موصول بكابل ADSL وكذلك تتأكد من ربط المودم بجهاز الكمبيوتر عبر الكابل المخصص لذلك ولاتنسى بإشعال جهاز المودم. بعدها قم بفتح أحد المتصفحات مثل كوزيلا أو جوجل كروم وأدخل على الرابط التالي: 192.168.1.1 ثم قم بتسجيل الدخول عبر إدخال المعلومات التالية: اسم المستخدم: admin، كلمة السر: admin. قم بالدخول على internet setup الموجودة في أعلى اليسار، ثم إضغط على add في الأسفل، ثم غير vci من 35 إل 38، أم إذا كنت مشترك في إيزي اتركها كما هي. ثم قم بتغيير Protocol إلى PPPoE، بعدها في خانة PPP username قم بإدخال اسم المستخدم الخاص بك الذي منحتك إياه الشركة المقدمة لخدمة الأنترنت وعلى الأغلب سيكون هو نفسه رقم الهاتف، بعدها قم بإدخال كلمة السر التي منحتك إباها الشركة أيضا في خانة PPP password وأعد كتابتها في Confirms PPP password، إترك باقي الخانات كما هي ثم إضغط على Apply. وهكذا تكون قد أنهيت الخطوات الضرورية للإتصال بالأنترنت، إن لم تتمكن من الدخول على الأنترنت تأكد إن كان كابل الأنترنت (ADSL) موصولا بشكل جيد، أو قم بالتوجه لإحدى الوكالات التجارية لشركة الأنترنت للحصول لحل المشكلة. لتعيين كلمة سر للويفي إضغط على Wireless ثم على Wireless Security قم بتغيير security mode من none إلى WPA only، ثم قم بكتابة كود الويفي الذي تريده في خانة Pre-Shared Key وإذا أردت تغيير كلمة السر مرة أخرى قم بالرجوع لنفس الخانة وتعيين كلمة السر الجديدة. إذا وجدت صعوبة في تطبيق أي خطوة من الخطوات السابقة يمكنك تتبع الشرح عبر الفيديو برابط الشرح هنا
  11. يحدث وميض الشاشة في Windows 10 عادةً بسبب أحد التطبيقات أو أحد برامج تشغيل جهاز العرض غير المتوافقة. لتحديد ما إذا كان أحد التطبيقات أو برنامج تشغيل جهاز العرض يتسبب في المشكلة، تحقق لرؤية ما إذا كان مدير المهام يومض. ثم بناءً على تلك المعلومات، سوف تحتاج إلى تحديث أو إلغاء تثبيت التطبيق أو التحديث أو العودة إلى الحالة السابقة أو إلغاء تثبيت برنامج تشغيل جهاز العرض. التحقق من وجود ومضات في مدير المهام اضغط على Ctrl + Alt + Delete لفتح مدير المهام. إذا كنت لا ترى مدير المهام بعد الضغط على Ctrl + Alt +Delete، فاضغط على Ctrl + Shift + Esc لفتح مدير المهام. إذا لم يومض مدير المهام بينما بقية الشاشة تومض، فعلى الأرجح هناك تطبيق غير متوافق يتسبب في المشكلة. في هذا السيناريو، راجع قسم تحديث تطبيق غير متوافق أو إلغاء تثبيته. إذا كان مدير المهام يومض مع كل شيء آخر على الشاشة، فإن أحد برامج جهاز العرض على الأرجح هو السبب في المشكلة. في هذا السيناريو، راجع قسمإصلاح برنامج تشغيل جهاز العرض. ‏‏ملاحظة للحصول على المساعدة في شاشة وامضة أو مشوشة على جهاز Surface Pro 4، راجع ‏‫وميض أو تشويش شاشة Surface Pro 4‬. إذا كنت تواجه مشكلة في رؤية الشاشة بشكل صحيح، فقد تحتاج إلى تشغيل جهاز الكمبيوتر في الوضع الأمنلاتباع الخطوات أدناه. إظهار الكل تحديث تطبيق غير متوافق أو إلغاء تثبيته إصلاح برنامج تشغيل جهاز العرض
  12. أهلًا بك، يمكن فعل ذلك من خلال الدالة replace فهنا مثلًا قم باستبدال كلمة table_name باسم الجدول لديك Update table_name set `url_site` = REPLACE(`url_site`,'***','');
  13. أهلًا بك، يمكنك استخدام برامج مخصصة online لفك تشفير أكواد أو ملفات php مثلًا أنا استخدمت لفك تشفير الشيفرة التي أرفقتها موقع اسمه unphp.net ويمكنك استخدام أي موقع أخر إن شعرت بنقص في التحويل... فقط أكتب في محرك البحث decrypt php file سيظهرلك العديد من المواقع التي يمكنك استخدامها بسهوولة سواء بنسخ الكود المراد فكة في مساحة يخصصها الموقع أو تحميل الملف المشفر ثم اختيار زر decode أو Decrypt (حسب الكلمة المعتمد كتابتها بزر إجراء فك التشفير) <?php ?><footer <div class="container" <div class="row" <div class="col-md-" <h<php the_field('footer-h','options'); </h <p<php the_field('footer-p','options'); </p </div <div class="col-md-" <div class="center" <h</h </div <php wp_nav_menu( array( 'theme_location' = 'footer-menu', 'menu_class' = 'list-unstyled' )); </div <div class="col-md-" <div class="center" <h </h </div <php wp_nav_menu( array( 'theme_location' = 'footer-menu', 'menu_class' = 'list-unstyled' )); </div </div </div <div class="visa" <div class="container" <div class="row" <div class="col-md-9" <php wp_nav_menu( array( 'theme_location' = 'footer-menu', 'menu_class' = 'list-inline' )); </div <div class="col-md-" <img src="<php echo IMAGES; /visa.png" alt="" class="img-responsive pull-left" </div </div </div </div <div class="support" <div class="container" <div class="row" <div class="col-md- col-sm-" <div class="single-sup" <a href="<php the_field('open-ticket','options'); " <i class="fa fa-envelope"</i <p </p </a </div </div <div class="col-md- col-sm-" <div class="single-sup" <a href="<php the_field('support-url','options'); " <i class="fa fa-support"</i <p </p </a </div </div <div class="col-md- col-sm-" <div class="single-sup" <a href="<php the_field('pay-url','options'); " <i class="fa fa-money"</i <p </p </a </div </div <div class="col-md- col-sm-" <div class="single-sup" <a href="<php the_field('privacy-url','options'); " <i class="fa fa-shield"</i <p </p </a </div </div </div </div </div <div class="copyrights" <div class="container" <div class="col-md-" <p <php bloginfo('name'); &copy; <php echo date('Y'); </p </div <div class="col-md-" <p class="serv"<a href="http://www.serv.com" style="color: #fff;" <img src="<php echo IMAGES; /serv.png" alt=" "</a</p </div </div </div </footer <php wp_footer(); </body </html <?
  14. لاحظ مسارات الدورة في الاعلى فعليا تم التطرق لما ذكرته خلال الدورة!!
  15. هناك ألعاب عربية على غوغل بلي ستور و أبل أب ستور لكنها ليست منتشرة عالميا أو تربح الملايين كما الغربية... مثلا لعبة الابراطورية التي انتشرت بشكل قليل حديثًا يمكنك الملاحظة بنفسك من خلال موقع similarweb الذي يتيح لك تصفح جميع التطبيقات المنشورة على كل من غوغل بلي ستور و أبل أب ستور سواء تطبيقات ألعاب أو تعليم أو غيرها لجميع دول العالم ... يمكنك اختيار ما تريد البحث عنه من القوائم العلوية ثم اختيار go فتعض النتائج بالترتيب مثلا ظهرت معي نتيجة البحث هنا ل top-paid Libanon games
  16. أجل يمكنك، فإلى جانب تعلّم الأساسيات ستتعلم كيف تبني تطبيقات حقيقية اعتمادًا على لغة JavaScript بحد ذاتها، وكيف تبني تطبيقات اعتمادًا على بيئة Node.js ومكتبة React.js، وتطبيق جوال باستخدام React native... الأمر الذي سيؤهلّك للعمل كمطوّر نظم خلفية وواجهات أمامية محترف ويضعك على الطريق الصحيح في مشوارك المهني. ستبدأ الدورة بأساسيات البرمجة باستخدام لغة JavaScript حيث ستعرض بأسلوب هندسي ممتع ومن أبسط المفاهيم البرمجية إلى المفاهيم المتقدمة بالإضافة إلى استعراض أفضل الأساليب المتبعة في البرمجة. الدورة هي عبارة عن مساق تدريبي كامل يبدأ من الصفر وينتهي عند إبداعك وبناء تطبيقك الأوّل. الدورة لا تعلّم الأساسيات فقط بل تضع المتدرب على بوابة الاحتراف ليكمل طريقه وينافس المحترفين. مسارات الدورة: **أساسيات لغة JavaScript سنتعلم البرمجة بلغة JavaScript إنطلاقًا من أبسط المفاهيم وحتى بناء تطبيق حقيقي. **أساسيات مكتبة React.js ستتعلم أساسيات مكتبة React.js لتطوير الواجهات الأمامية وستبني تطبيقًا عمليًا عبرها. **أساسيات بيئة Node.js ستتعلم أساسيات بيئة Node.js لتطوير النظم الخلفية بشرح مفصّل وعملي. **تطوير تطبيق جوال باستخدام React Native ستتعلم تطوير تطبيق جوال عبر مكتبة React Native باستخدام Expo. كل التوفيق...
  17. الامر يرجع لسياسة المتجر الذي ستنشر عليه تطبيقك.. وغالبا يمكنك اعادة تحديد المدن المراد نشر تطبيقك فيها مثلا من اشهر متاجر تطبيقات الموبايل متجر Google play... الذي يدعم اكثر من 140 دولة منهم العراق والعديد من الدول العربية التي يمكن ان ينتشر فيهم تطبيقك إذا رفعته عليه وحددت جميع الدول.. واذا كنت معني بدول معينه يمكنك تحديدهم هم فقط اثناء رفع التطبيق على غوغل بلي
  18. أهلا بك، تُعتبر خرائط جوجل من أفضل الخدمات المتوفرة في مجال البحث عن الأماكن والمحلات، شأنها شأن فور سكوير الذي يتميّز عن خرائط جوجل بإمكانية اضافة النشاط التجاري بكل سهولة ودون مشاكل. لكن المُستخدمين بإمكانهم اضافة أي شيء إلى خرائط جوجل بكل سهولة من خلال خدمة جوجل للأعمال والتي يُمكن الوصول إليها عبر الرابط https://www.google.com/business. بعد الدخول إلى الموقع يقوم المُستخدم بتسجيل الدخول باستخدام حساب جوجل، بعدها يُمكن تعبئة بيانات النشاط التجاري مثل رقم الهاتف، موقعه على الخارطة بالإضافة إلى وسائل الاتصال والتواصل الإجتماعي، ليقوم جوجل بعدها بإضافة هذه البيانات إلى خرائط جوجل بالإضافة إلى ظهورها عند البحث عن نفس النشاط داخل مُحرك البحث. لمتابعة الخطوات بالتفصيل يمكنك مشاهدة هذا الفيديو
  19. NGINX حيث تقدم الشركة المسؤولة عن NGINX منتجًا تجاريًا يسمى NGINX Plus ، والذي يدعم مجموعة من الميزات الإضافية المتعلقة بموازنة التحميل وتدفق الوسائط والفيديوهات. انتقل لجانب support هنا لمزيد من المعلومات
  20. يَختار مُدراء الأنظمة الخادم أباتشي غالبًا بسبب مرونته، وقُدرته على التحمّل، وتوفّر دعمه العالي والمُنتشر، كما يُحسب له قابليته على التوسّع عبر نظام الوحدات (modules) الديناميكيّة، واستطاعته على مُعالجة عدد كبير من اللغات المُفسّرة (interpreted languages) من دون الحاجة إلى برمجيّة مٌستقلّة وسيطة. يختار مُدراء الأنظمة الخادم Nginx غالبًا بسبب استهلاكه الأمثل للمَوارد، واستجابته العالية مع الضغط المتزايد. دعنا نقارن بين الخادمين من عدة جوانب معماريّة مُعالجة الاتصال (Connection Handling Architecture) يَكمن الاختلاف الواضح بين أباتشي و Nginx في طريقة كلٍ منهما في مُعالجة الاتصالات وتدفّق البيانات (traffic)، وربّما هذا السبب وراء الاختلاف في طريقة كل من الخادمين في الاستجابة إلى حالة تدفّق البيانات المُختلفة. وحدات أباتشي (Apache Modules) يقدّم أباتشي تشكيلةً من وحدات المُعالجة المُتعدّدة (multi-processing)، والّتي يُطلق عليها بـ MPMs، والغرض منها تحديد آليّة مُعالجة طلبات العميل، ويَسمح ذلك مُدراء الأنظمة عامّةً بالتبديل بين معماريّة مُعالجة الاتصال بسهولة، والوحدات هي: mpm_prefork: تَستنسخ وتُوالد هذه الوحدة الخاصّة بالمُعالجة عمليّات (processes) باستخدام سلسلة وحيدة (single thread)، على أنّ تكون كل عمليّة لمُعالجة طلب، ويستطيع كل ابن مُعالجة اتصال واحد في نفس الوقت، وطالما أنّ عدد الطلبات أقل من عدد العمليّات، فستكون هذه الوحدة سريعةً جدًا، ولكن يَنخفض الأداء بسرعة بعد تخطّي الطلبات عدد العمليّات، ولذلك لا يُعتبر هذا النمط بالخيار الجيّد للعديد من السيناريوهات، فكل عمليّة لها تأثير بليغ على استهلاك الذاكرة (RAM)، ولهذا السبب تُصعّب هذه الوحدة من عمليّة التوسّع بطريقة مُلائمة، ومع هذا تبقى هذه الوحدة خيارًا جيّدًا إن تمّ استخدامها مقترنةً مع مُقوّمات (components) أُخرى لم تُبنى بالأساس آخذةً بعين الاعتبار السلاسل (threads)، فلغة PHP ليست سلسلة آمنة (thread-safe)، ولذلك يُنصح بهذه الوحدة باعتبارها الطريقة الوحيدة الآمنة للعمل مع mod_php والّتي هي وحدة من وحدات أباتشي لمُعالجة هذا النوع من الملفّات. mpm_worker: تستنسخ وتُوالد هذه الوحدة عمليّات (processes) كل منها ذات قُدرة على إدارة سلاسل مُتعدّدة (multiple threads)، تستطيع كل واحدة من هذه السلاسل مُعالجة اتصال وحيد، تُعتبر هذه السلاسل أكثر كفاءة من العمليّات، بسبب أنّ هذه الوحدة تتوسّع (scales)، وتتحمّل المزيد من الضغط أفضل من الوحدة prefork MPM، وباعتبار أنّه يوجد سلاسل أكثر من العمليّات، فهذا يعني أيضًا أنّ الاتصالات الجديدة تستطيع مُباشرةً استهلاك واستخدام سلسلةبدلًا من اضطرارها إلى الانتظار لتوفّر عمليّة مُتاحة. mpm_event: تَعمل هذه الوحدة بشكل مُشابه إلى الوحدة worker، ولكنها مُحسّنة لتتولّى اتصالات keep-alive، فعند استخدام الوحدة worker فإن الاتصال سيَحتفظ بالسلسلة (thread) بصرف النظر فيما إذا كان الطلب نشطًا فيما صُنع من أجله ما دام الاتصال محفوظًا نشطًا، فالوحدة mpm_event تتولّى الاتصالات keep-alive بالاحتفاظ جانبًا بسلاسل مكرّسة لمُعالجتها، وبتمرير الطلبات النشطة إلى سلاسل أُخرى، وهذا من شأنه أنّ يُبعد الوحدة من الغوص بطلبات keep-alive، الأمر الّذي يُجيز بتنفيذ الطلبات (execution) بشكل أسرع، وهذا الأسلوب أصبح يعمل بشكل مُستقر مع الإصدار Apache 2.4. أصبح الأمر أكثر وضوحًا، حيث تقدّم خوادم أباتشي بنية معماريّة مرنة للاختيار بين مُختلف الاتصالات وخوارزمية مُعيّنة في مُعالجة الطلبات، وبُنيت هذه الخيارات في الدرجة الأولى من تطوّر الخادم والحاجة المُتزايدة للاتصالات المُتزامنة لتواكب طبيعة الإنترنت بعد تغيرها وتطوّرها. آليّة مُعالجة الاتصال في خادوم Nginx قَدِم Nginx إلى عالم خوادم الويب بعد قدوم أباتشي، مَبنيًّا ومُعدًّا لمشاكل الاتصالات المُتزامنة (concurrency) الّتي تواجه المواقع عند التوسّع، مُحمّلًا بهذه المعرفة، صُمّمَ Nginx من جذوره ليستخدم خوارزميّة في مُعالجة اتصالات مدفوعة بالحالة (event-driven)، غير مُستوقفة (non-blocking)، ولا مُتزامِنة. يستنسخ ويُوالد Nginx من العمليّات العاملة (worker processes)، ويستطيع كلٍ مِنها مُعالجة آلاف الاتصالات، وتُنجذ العمليّات العاملة ذلك عن طريق تطبيق/تنفيذ آلية حلقيّة سريعة، والّتي تفحص بشكل مُستمر حالات العمليّات (processes events)، وإن فصل المُهمّة الفعليّة عن الاتصالات يسمح لكلعامل بالاهتمام بنفسه باتصال فقط عند بدء حالة جديدة. يتموضع كل اتصال مُعالج من قبل العامل ضمن حلقة الحالة (event loop) في مكان تواجد بقية الاتصالات، وتُعالج الأحداث بشكل لا مُتزامن ضمن الحلقة، ليتمّ إنجاز المُهمّة بطريقة غير مُستوقفة (non-blocking)، وعندما يُغلق الاتصال سيتمّ نزعه من الحلقة. يَسمح هذا الأسلوب من مُعالجة الاتصال Nginx بتحمّل الضغط العالي بشكل لا يُصدّق وبأقل المَوارد المُتاحة، وباعتبار أنّ الخادم ذو سلسلة وحيدة (single-threaded) ولا تتوالد العمليّات لتُعالج كل اتصال جديد، فإن استهلاك المُعالج (CPU)، والذّاكرة يبقى ثابتًا نسبيّا، حتّى في أوقات الذروة. كيف يُعالج أباتشي و Nginx المُحتوى الثّابت والمحتوى الديناميكي (المُتغيّر) إن أبرز ما يتمّ النظر إليه عند المُقارنة بين الخادمين هي طريقة كلٍ منهما في التعامل مع طلبات المُحتوى الثّابت (static)، والمُحتوى المُتغيّر (dynamic). كيف يتعامل أباتشي مع المُحتوى الثّابت والمُتغيّر تستطيع خوادم أباتشي التعامل مع المُحتوى الثّابت باستخدام الطريقة التقليديّة المُعتمدة على الملفّات، ويعود أداء هذه الإجراءات (operations) في الدرجة الأولى على دور ووظيفة أساليب الوحدات (MPM) المشروحة سابقًا. يستطيع أباتشي أيضًا مُعالجة المُحتوى الديناميكي (المُتغيّر) بدمج مُعالج اللغة المُراد مُعالجتها داخل كل من نماذجه العاملة (worker instances)، وهذا يَسمح له بتنفيذ المُحتوى الديناميكي داخل خادم الويب نفسه بدون الحاجة إلى الاعتماد على مُقوّمات خارجيّة، ومن المُمكن تفعيل هذه المُعالجات الديناميكيّة (المُتغيّرة) من خلال استخدام وحدات قابلة للتحميل بشكل ديناميكي. إن قدرة أباتشي على مُعالجة المُحتوى الديناميكي بشكل داخلي تعني أنّ الإعداد يُصبح أسهل لمُعالجة هذا النوع من المُحتوى، فليس من الضروري تنسيق عمليّة الربط مع برمجيات إضافيّة، وتستطيع الوحدات وبسهولة أنّ تقوم بالتبديل عندما تتغيّر مُتطلّبات المُحتوى. كيف يتعامل Nginx مع المُحتوى الثّابت والمُتغيّر لا يَملك Nginx بطبيعته أي قدرة على مُعالجة المُحتوى الديناميكي، ولمُعالجة شيفرة PHP وطلبات المُحتوى الديناميكي، فإن على Nginx تمرير الطلبات إلى مُعالج خارجي من أجل التنفيذ (execution) والانتظار ريثما يتم الانتهاء من مُعالجة هذا المُحتوى ليتمّ إعادة إعادته، ومن ثم عرض النتائج على العميل. يَنبغي على مُدراء الأنظمة الانتباه إلى أنّ الأسلوب الّذي ينتهجه Nginx يستوجب إعدادًا بينه وبين المُعالج وباستخدام واحدًا من البرتوكولات الّتي يفهمها Nginx أمثال: HTTP, FastCGI, SCGI,uWSGI, memcache، وهذا من شأنه أنّ يُعقّد الأمور بعض الشيء، خصوصًا عند مُحاولة توقّع عدد الاتصالات اللازم السماح بها، حيثُ أنّه سيتمّ استخدام اتصالًا إضافيًا لكل مُعالج يتمّ استدعاؤه. من ناحية أخرى، إن هذا الأسلوب يقدّم بعضًا من الأفضليّة، عندما نعلم أنّ مُفسّر المُحتوى الديناميكي غير مُدمج في عمليّة العامل، وتكلفة هذه الطريقة ستُدفع للمُحتوى الديناميكي فقط، وعلى أنّ يُقدّم المُحتوى الثّابت بطريقة مُباشرة، ولا يتمّ الاتصال بالمُفسر إلا عند الحاجة، والجدير بالذكر أنّ أباتشي يستطيع العمل بهذا الأسلوب، ولكن بعمله ذلك سيتخلّى عندها عن بعض ميزاته. الاختلاف بين الإعداد الموزّع (Distributed) والإعداد المركزي (Centralized) يَعتبر مُدراء الأنظمة الاختلاف الأكبر والبارز بين هذين الخادمين هو فيما إذا كان الإعداد والتخصيص على مُستوى المسار مسموحًا أو لا ضمن مسارات (directories)المُحتوى. فلسفة Apache في الإعداد يُضمّن أباتشي خيارًا للسماح بالإعداد لكل مسار عن طريق تَفحُّص (inspecting) وتفسير (interpreting) التعليمات أو التوجيهات الموجودة في الملفات المخفيّة داخل مسارات المُحتوى نفسها، وهذه الملفّات معروفة بملفات .htaccess. باعتبار أنّ هذه الملفّات تَقطن داخل مسارات المُحتوى نفسها، فعند مُعالجة طلبٍ ما، فإن أباتشي يَفحص كل جزء من مسار الملفّ المطلوب باحثًا عن ملفّ .htaccess ليُطبّق التوجيهات الّتي بداخله، وهذا من شأنه أنّ يسمح للإعداد اللامركزي لخادم الويب، والذي غالبًا ما يُستخدم لإنجاز: إعادة كتابة عنوان الموقع (URL rewrites) تقييد الوصول (access restrictions) التفويض والمُصادقة (authorization and authentication) سياسات التخبئة (caching policies) بالطبع يُمكن للأمثلة السابقة إعدادها عن طريق ملفّ إعدادات أباتشي الرئيسي، ولكن استخدام ملفات.htaccess يَملك بعض الميزات: أوّلًا، باعتبار أنّها تُفسّر في كل مرّة توجد بها مع المسار المطلوب، فهي تُنفّذ مُباشرةً بدون إعادة تحميل الخادم. ثانيًا، تجعل من المُمكن السماح للمُستخدِمين غير المصرّح لهم بالتحكم بجانب معيّن من المُحتوى الخاصّة بهم بدون إعطائهم تحكم كامل لملفّ الإعدادات. يُقدّم هذا النمط من الإعداد طريقة سهلة ونموذجيّة، وخاصّة لبعض برمجيات الويب، مثل أنظمة إدارة المُحتوى (CMS)، لغرض إعداد بيئتها بدون مَنح إذن وصول إلى ملفّ إعدادات مركزيّ، وكما هو معروف يُستخدم هذا الأسلوب مع مزودات الاستضافة المُشتركة (shared hosting providers) لصون والحفاظ على الإعدادات الرئيسية مع إمكانيّة منح العُملاء أفضليّة التحكّم بمسارات مُعيّنة. فلسفة Nginx في الإعداد لا يُفسّر Nginx ملفّات .htaccess، ولا يُقدّم أي آليّة للتعامل مع كل مسار من دون استخدام ملفّ إعدادات رئيسي، قد يبدو هذا الأسلوب أقل مرونةً من أسلوب أباتشي، ولكن من ناحية أُخرى فلهذا الأسلوب أفضليته. إن عدم الاعتماد على نظام ملفّات .htaccess الخاصّ بالإعداد على مستوى المسارات يُقدّم سرعةً في الأداءً، فخادم أباتشي عليه القيام بتفحّص المسار الجذر لكل طلب يصله، وعند وجود ملفّ أو أكثر خلال عمليّة البحث، يتم قراءة محتوياته وتفسيرها، ولكن Nginx لا يفعل ذلك، فهو يخدم الطلبات بسرعة أكبر بالاعتماد على مكان وحيد للبحث عنه. أفضليّة أُخرى مُتعلّقة بالحماية، فإن توزيع ملفّات الإعدادات على مستوى المسارات يوزّع مسؤوليّة الحماية على كل المُستخدِمين، الّذين قد يكونوا في معظم الأحوال غير موثوقون لتولّي هذه المُهمّة بالشكل الأمثل، فعندما يقوم مُدير النظام بتولّي مُهمة التحكم بالخادم ككل، يمنع ذلك من حدوث أخطاء، والتي قد تحدث في حال منح صلاحيات وصول لأطراف أُخرى. يجدر الذكر أنّه من المُمكن تعطيل تفسير ملفّات .htaccess’ في أباتشي`، في حال أنها تُشكل نوعًا من القلق لمُدير النّظام. الاختلاف بين تفسير الملفّات وتفسير URI لا يقتصر الاختلاف بين الخادومين على ما سبق فقط، فيظهر الاختلاف الآخر في كيفيّة تفسير كلٍ منهما للطلبات (requests) وربطها مع المَوارد المُتواجدة على النّظام. كيف يُفسر Apache الطلبات يقدّم أباتشي القدرة على تفسير الطلب إما كمَورد فيزيائي (حقيقي) على نظام الملفّات (filesystem) أو عنوان URI الّذي قد يحتاج أسلوب أكثر تجرّد، ويستخدم أباتشي بشكلٍ عام للأسلوب الأول كتل (blocks) وهي إما <Directory> أو <Files>، بينما يستخدم كتل <Location>للمَوارد الأكثر تجرّدًا. صُمّم أباتشي من الأساس كخادم ويب، لذلك في مُعظم الأحيان فإن السلوك الافتراضيّ هو تفسير الطلبات كمَوارد نظام ملفّات (filesystem)، حيثُ يبدأ بتتبّع جذر المُستند وإلحاقه بجزئية الطلب متبوعًا باسم المُضيف (host) ورقم المنفذ في مُحاولة لإيجاد الملفّ المطلوب، بمعنى آخر وببساطة، تتمثّل هرميّة نظام الملفّات على الويب كشجرة مُستند. يُقدّم أباتشي عددًا من البدائل عندما لا يتوافق الطلب مع نظام الملفّات المقصود، فمثلًا من المُمكن استخدام الموجّه Alias لربط عنوان البديل، مع العلم أنّ استخدام الكتل <Location> هو طريقة للتعامل مع URI نفسها بدلًا من نظام الملفّات، كما يُمكن استخدام التعابير النمطيّة (regular expression)، والّتي من المُمكن استخدامها لتطبيق الإعداد بسهولة أكبر في كامل نظام الملفّات. يُعوّل أباتشي على نظام الملفّات بشكل كبير، يظهر ذلك جليًا في اعتماده على ملفّات .htaccessلإعداد كل مسار، حتّى أنّ التوثيق الرسميّ الخاصّ به يحذر من استخدام كتل مُعتمدة على URI في تقييد الوصول عندما يكون الطلب يَعتمد بشكل أو بآخر على نظام الملفّات. كيف يُفسّر Nginx الطلبات أُنشِأ Nginx ليكون خادمًا للويب وخادمًا وكيلًا/وسيطًا (proxy server)، ونظرًا إلى المعماريّة المطلوبة للعمل بهذه الأدوار، فإنه يعمل بشكل رئيسي مع URIs، والتحويل إلى نظام الملفّات عند الضرورة. يُمكن رؤية ذلك في بعض جوانب بناء وتفسير ملفّات إعدادات Nginx، فلا يوفّر Nginx آليّة لتحديد إعدادًا لمسار نظام الملفّات، بل يَستعيض عنها بتحليل URI نفسه. يُمكن توضيح ذلك بالمثال، كتل الإعداد الأوليّ لـ Nginx هي: server و location، الكتلة serverتُفسّر المُضيف الجاري طلبه، بينما الكتل مسؤولة عن مُطابقة أجزاء من URI التي تأتي بعد المُضيف والمنفذ، في هذه المرحلة يتمّ تفسير الطلب كـ URI، وليس كعنوان على نظام الملفّات. يتوجّب في نهاية المطاف على جميع الطلبات أنّ تُربط مع عنوان على نظام الملفّات وذلك للملفّات الثّابتة، فأولًا، سيَختار Nginx كتل server و location الّتي سوف تتولّى الطلب، ومن ثم ضم جزر المُستند مع الـ URI. إن تحليل ومُعالجة الطلب قبل كل شيء على شكل URIs بدلًا من عناوين نظام الملفّات يَسمح لـ Nginxالعمل بسهولة وعلى حدٍّ سواء كخادم وسيط (بروكسي)، وكخادم بريد، وخادم ويب، فقد تمّ إعداده ليُلائم كيف له أنّ يستجيب لأنماط الطلبات المُختلفة، ولا يفحص Nginx نظام الملفّات حتّى يكون جاهزًا ليَخدم الطلب، وهذا يُفسّر لماذا هو لا يُطبّق نمط ملفّات .htaccess. الوحدات يتوسع كلا الخادومان عن طريق نظام الوحدات، ولكن طريقة عملهما تختلف عن الآخر بشكل كبير. كيف يستخدم أباتشي نظام الوحدات (Modules)؟ يَسمح نظام وحدات أباتشي بطريقة آليّة وديناميكيّة بتركيب ونزع الوحدات ليتناسب مع مُتطلّبات مُدير النظام خلال عمليّة تشغيل الخادم، وتتواجد نواة أباتشي دائمًا بكل جاهزية، بينما يُمكن تشغيل أو تعطيل الوحدات، أو حتّى حذفها أو إضافة ما يلزم إلى الخادم. يستخدم أباتشي الوحدات في العديد من المهام، ونظرًا للباع الطويل لمنصة أباتشي، فيتوفّر عدد هائل من مكتبات الوحدات، والّتي من المُمكن استخدامها في تعديل بعض الوظائف الداخليّة في بنية خادم أباتشي، فمثلًا الوحدة mod_php تقوم بدمج مُفسّر PHP داخل كل عامل (worker). لا تنحصر الوحدات لمُعالجة المُحتوى الديناميكي (المُتغيّر) فقط، فيُمكن استخدامها في العديد من الوظائف، فيُمكن استخدامها في: rewriting URLs: إعادة كتابة العناوين authenticating: المُصادقة logging: التّتبّع caching: التخبئة compression: الضغط proxying: الوساطة encrypting: التشفير كيف يتعامل Nginx مع نظام الوحدات (Modules) يُطبّق ويتعامل Nginx مع نظام الوحدات، ولكن يختلف الأمر عما هو في نظام أباتشي، فلا تُحمّل الوحدات بشكل ديناميكي في نظام Nginx، لذلك يجب على هذه الوحدات أنّ تُختار وتُترجم (compiled) إلى النواة. قد يبدو الأمر صعبًا للعديد من المُستخدمين وخاصّة لهؤلاء الذين لا يُحبذون صيانة برمجياتهم المُترجمة (compiled) بدون الاستعانة بنظام حزم تقليدي، وعلى الرغم من أنّ حزم الموزّع تتضمّن الوحدات الأكثر استخدامًا، ولكن عند الحاجة إلى وحدة غير شائعة، سيتوجب على مُدير النظام بناء الخادم من المصدر بنفسه. تَبقى وحدات Nginx مع ذلك ذات فائدة، وتسمح لمُدير النّظام بتحديد ماذا يجب على الخادم أنّ يحتوي من وظائف، أيضًا بعض المُدراء ينظر إلى الأمر من منظور الحماية، حيثُ أنّ المُكوّنات الاعتباطيّة لا يُمكن أن تُدرج داخل الخادم. تُقدّم وحدات Nginx مقدرات مُماثلة للوحدات الّتي المُقدّمة من أباتشي، على سبيل المثال، توفّر وحدات Nginx: proxying support: الوساطة compression: الضغط logging: التّتبّع rewriting: إعادة كتابة العنوان authentication: المُصادقة encryption: التشفير الدعم والتوافُقيّة والتوثيق يجب دائمًا التأكد من آليّة بناء الخادم ومُتطلباتها، وما الّذي على مُدير النّظام عمله لبناء خادم يعمل بأبسط الإمكانيات، وما هو حجم الدعم والمُساعدة المتوفّر لهذه البرمجية. الدعم في أباتشي يُعرف الخادم أباتشي بباعه الطويل في هذا المجال، ولذلك فإن الدعم الخاصّ به متواجد وبقوّة، حيثُ يتوفّر توثيق مُمتاز لمكتباته الخاصّة به ومكتبات الطرف الثالث (الخارجيّة)، وعلى كافّة المُستويات، سواء كان لنواة الخادم أو للجزئيات المُرتبطة ببرمجيات أُخرى. يتوفّر بجانب التوثيق، العديد من الأدوات ومشاريع الويب لتسريع بدء العمل مع بيئة الخادم، وهي موجودة ضمن المشاريع نفسها أو مُتوفّرة ضمن برمجيات الحزم المعروفة. يَملك أباتشي بشكلٍ عام دعمًا قويًا من قِبل مشاريع الطرف الثالث، وذلك بسبب حصته السوقيّة، وقِدَمه، كما يَملك مُعظم مُدراء الأنظمة بشكل أو بآخر معرفة جيّدة بخادم أباتشي، ليس فقط بسبب انتشاره، ولكن أيضًا بسبب أنّ معظمهم بشكل أو بآخر يستخدم الاستضافة المُشتركة (shared-hosting)، والّتي تعتمد على خادم أباتشي بشكل حصري، لمقدرته الإدارية الموزّعة باستخدام ملفّ .htaccess. الدعم في Nginx يكسب Nginx المزيد من الدعم مع ازدياد المُستخدِمين بسبب أدائه العالي، ولكن يبقى عليه التطوير من نفسه في بعض الجزئيات. قد كان من الصعب إيجاد توثيق مفهوم وواضح بالغة الإنكليزية للخادم Nginx في البداية، نظرًا إلى أنّ تطويره وتوثيقه تمّ بالغة الروسية، ومع ازدياد الاهتمام بالمشروع، أصبح هناك وفرة من المصادر على الموقع الرسميّ وغيره من الدعم الخارجي. أصبح الدعم متوفّرًا أكثر من ذي قبل فيما يخص تطبيقات الطرف الثالث، وبدأت بعض الحزم بتقدم خيارات الإعداد التلقائي سواءً لـ أباتشي أو Nginx، وعند عدم توفّر الدعم، فإن إعداد Nginx مع البرمجيات البديلة عادةً ما يكون واضحًا ومُيسرًا طالما أنّ برمجية الطرف الثالث تملك توثيقًا جيّدًا لمُتطلّباتها. استخدام Apache و Nginx معًا تمّ عرض فوائد وقصور كلا الخادومين، ويجب على مُدير النّظام في هذه المرحلة أنّ يُحدّد أيًا منهما يُناسب احتياجاته، ولكن يجد العديد من المُستخدِمين أنّه من المُمكن تقوية خادوم الويب عند استخدام كلٍ من أباتشي و Nginx جنبًا إلى جنب. إن إتمام هذه الشراكة يتمّ عن طريق تَمَوْضُع Nginx أمام أباتشي كوكيل/وسيط عكسي (reverse proxy)، وهذه يسمح لـ Nginx بمُعالجة جميع الطلبات من العُملاء، الأمر الّذي يَسمح بالاستفادة من سرعة Nginx وقدرته على تولّي عدد كبير من الاتصال في وقتٍ واحد. إن خدمة الملفّات الثّابتة بسرعة كبيرة ومباشرةً إلى العُملاء، هو الأمر الّذي يتفوّق به Nginx، ولكن وللمُحتوى الديناميكي، ملفات PHP مثلًا، سيُوكل Nginx الطلبات إلى أباتشي لمُعالجتها والعودة بصفحة بالنتيجة النهائيّة، ليستطيع Nginx عندها تمرير المُحتوى إلى العميل. يعمل هذا الإعداد بشكل جيّد للعديد من مُدراء الأنظمة، وذلك بسبب أنّه يسمح لـ Nginx ليعمل كآلة فرز وتصنيف، بمعنى أنّه سيتولّى مُعالجة جميع الطلبات طالما أنّه يستطيع ذلك، وتمرير ما لا يستطيع التعامل معه، وبتخفيض الطلبات المطلوب من خادم أباتشي تولّيها، سيُخفف بعضًا من الاستيقاف (blocking) الّذي قد يحدث عندما يستهلك أباتشي المزيد من المُعالج. يَسمح هذا الإعداد أيضًا لمُدراء الأنظمة بالتوسّع عن طريق إضافة خادم خلفي (backend) على حسب الحاجة والضرورة، ومن المُمكن إعداد Nginx لتمرير الطلبات إلى تجمّع (pool) من الخوادم بسهولة، الأمر الّذي يزيد من الأداء والفعاليّة. الختام يُقدّم كلًا من أباتشي و Nginx مُرونة في الاستخدام، وقوّةً في الأداء، والتفضيل بينهما هو لأمرٌ يَعتمد على تقدير مُتطلبات ووظائف الخادم، وعلى مُدير النّظام أنّ لا يسأل: هو أفضل خادم ويب؟، بل السؤال الّذي يجب سؤاله هو، ما هو أفضل خادم ويب لمشروعي الّذي يتطلّب كذا وكذا؟ يوجد بالفعل اختلافات بين المشروعين، هذه الاختلافات من شأنها أن تأثر على الأداء، والقدرات، والوقت المُستغرق في إتمام أي منهما للعمل بالجاهزيّة الكاملة، ولكي يتمّ اختيار الأفضل يُنصح بعمل تسوية أو مقايضة بين المحاسن والمساوئ، ففي نهاية المطاف لا يوجد خادم يُلبي كافة الاحتياجات، ويَكمن الحلّ في ترتيب الأولويات. ترجمة الأستاذ محمد أبرص لمقال Apache vs Nginx: Practical Considerations يمكنك قراءة هذا المقال للتعرف أكثر على الجوانب التي يفوز فيها أباتشي على Nginx والعكس
  21. الأمور تكون سهلة بعد كتابة تعليمة SQL مشروطة بقيد معطياتك للوصول لجدول الزبائن وبالتحديد عمود الرصيد لكل زبون من هذا الجدول بقاعدة بيانات برنامجك... بعد ذلك تقوم بحفظ النتيجة على اي شكل كان... سواء حفظ اسماء الزبائن الناتجين داخل مصفوفة او arraylist او غير ذلك المهم ان نستطيع إظهار النتيجة بطباعتها وقراءتها .. فكرة الكود ستكون شبيهه كثيرا بسؤالك السابق مع التعديل على تعليمه SQL لتناسب الغرض الجديد String sql = "select employee_name from employees where salary >=10000 order by employee_name"; بذلك تنتج قائمة تعرض الزبائن ذو رصيد المطلوب
  22. أهلًا بك، يمكنك تجريب هذا البرنامج المُنشأ سابقًا لنفس الهدف على زبائن بدلًا من موظفين...على اعتبار أنك تستخدم NetBeans لإنشاء الواجهات فإن الزر reloadButton الذي ستنشئه سيقوم بمهمة إظهار أسماء الأشخاص ذو الإسم "ahmed" public static ArrayList<Customer> getAllCustomer() throws ClassNotFoundException, SQLException { Connection conn=DBConnection.getDBConnection().getConnection(); Statement stm; stm = conn.createStatement(); String sql = "select customer_name from customers where customer_name LIKE 'Ahmed%' OR customer_name LIKE 'ahmed%' order by customer_name"; ResultSet rst; rst = stm.executeQuery(sql); ArrayList<Customer> customerList = new ArrayList<>(); while (rst.next()) { Customer customer = new Customer(rst.getString("id"), rst.getString("name"), rst.getString("address"), rst.getDouble("salary")); customerList.add(customer); } return customerList; } //this is the model class public class Customer { private String id; private String name; private String salary; private String address; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSalary() { return salary; } public void setSalary(String salary) { this.salary = salary; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } } //this is the view method private void reloadButtonActionPerformed(java.awt.event.ActionEvent evt) { try { ArrayList<Customer> customerList = null; try { try { customerList = CustomerController.getAllCustomer(); } catch (SQLException ex) { Logger.getLogger(veiwCustomerFrame.class.getName()).log(Level.SEVERE, null, ex); } } catch (Exception ex) { Logger.getLogger(ViewCustomerForm.class.getName()).log(Level.SEVERE, null, ex); } DefaultTableModel tableModel = (DefaultTableModel) customerTable.getModel(); tableModel.setRowCount(0); for (Customer customer : customerList) { Object rowData[] = {customer.getId(), customer.getName(), customer.getAddress(), customer.getSalary()}; tableModel.addRow(rowData); } } catch (Exception ex) { Logger.getLogger(ViewCustomerForm.class.getName()).log(Level.SEVERE, null, ex); } }
  23. أهلًا بك، في البداية بالنسبة لنظام التشغيل ماك أو ويندوز فيمكنك اختيار جهاز كمبيوتر يعمل بنظام الويندوز؛ لأنّ لديها قُدرة كبيرة على الأداء، وتحمّل الضّغط. لا نقول إنّ أجهزة الماك سيّئة، بل على العكس، هي أجهزةٌ مُدهشةٌ؛ ولكن من الواضح لنا جميعًا أنّ ثمن هذه الأجهزة أعلى بكثيرٍ من ثمنِ أجهزة كمبيوتر الويندوز. إضافةً إلى ذلك، فإنّ أجهزة كمبيوتر الويندوز يُمكن تطويرها بتغيير بعض عتادها بحسبِ مُتطلّبات الفرد المُستخدم. أمّا أجهزة ماكينتوش مُصنّعة بحيث لا يُمكنك فعل ما تُريد معها. ما دُمنا قرّرنا استخدام نظام الويندوز، فمن الأفضل أن نعمل دائمًا مع الإصدارات الحديثة، والإصدار الحالي هو ويندوز 10 وأنصحك ب كرت شاشة (GPU) لايقل عن 960 GTX من نوع nVidia ويفضل اقل حجم للكارت شاشة 4GB للحصول على أداء أفضل كمصمم من المُهم أن تنظرَ للنّقاط الآتية بما أنك تحتاج بعض التفسيرات: وحدة المعالجة المركزية (المعالج Processor) وحدة المعالجة المركزية (المُعالج Processor): هي مركز كلّ شيء وأهمّ مُكوّنات الحاسب؛ لأنّها تُفسّر التّعليمات وتُعالج البيانات الّتي تتضمنّها البرمجيّات Software. المُعالجات الحاليّة جميعها –تقريبًا- جيّدة؛ ولكن اعتمادًا على النّموذج أو الطّراز يُمكنك الحصول على أداءٍ أعلى أو أدنى. حاليًّا، المُعالجات الأفضل هي: إنتل زيون Intle Xeon: مُعالجات مُتعدّدة النّوى (ثُنائيّة، رُباعيّة). غاليّة السّعر إلّا أنّ أداءها لا يُقارن. مُعالجات إنتل Intle من نوعi5و i7 و i9(حديثا): بالترتيب يُقدّمون أداءً رائعًا، وسُرعة أعلى في تحميل البيانات وإتمام العمليّات، إضافة إلى أنّ هذا النّوع من المُعالجات ذو سخونةٍ أقل. مُعالجات AMD: جيّدة الأداء في مجال التّصميم والألعاب، سعرها مُناسب. يعيبها ارتفاع درجة حرارتها في إصداراتها القديمة. عند الشّراء ركّز على الزّيادة والأكثر في كلٍّ من: -- سُرعة السّاعة Clock Speed: عدد عمليّات المُعالج في الثّانية. عدد الأنوية Cores: للتّحكم في كثيرٍ من المهام في الوقتِ نفسه، تصل إلى 16 نواة؛ ما يجعل الصّورة واقعيّة والريندر أسرع. الذاكرة المخبأة Cache Memory: ذاكرة مؤقّتة لحفظ البيانات الّتي تكرّر استخدامها. مُعالجات 64بت: لضمان الأداء الأفضل والسّرعة العليا. الأمرُ في النّهاية هو: موازنة بين السّرعةِ والطّاقةِ والثّمن. -- ذاكرة الوصول العشوائي RAM ذاكرة الوصول العشوائي RAM: عنصر آخر مُهم، هي ذاكرة تحتفظ بالبيانات والمعلومات مؤقّتًا، المزيد من ذاكرة الوصول العشوائي، تعني: مساحة أكبر لتشغيل البرامج، وفتح عدّة تطبيقات بسهولة، وسرعة في تنفيذ العمليّات ومُعالجتها. عند شرائك للرام ركّز على: النّوعيّة: نوع DDR3 هو الأفضل. التّردّد: لسرعة نقل البيانات في الجهاز، وأفضل تردّد هو 1600. الحجم: كلّما كبر زاد أداء جهاز الكمبيوتر. الأفضل (16 GB) أو (32 GB). الشّركة المُصنّعة: بسبب أنّ بعض الشّركات تُضيف خاصيّة التّبريد للحصول على أداء أفضل. أشهر الشّركات وأفضلها: G.skill، Corsair، Kingston. -- القرص الصلب Hard Disk القرص الصلب Hard Disk: هو وحدة التّخزين الرّئيسة. قُدرة القرص الصّلب وحجمه تعتمدان على نوعيّة عملك. ينبغي أن يكون بسرعة 7200 دورة في الدّقيقة، وبقدرة تخزينيّة كبيرة، فهذا يضمنُ الوصول إلى البياناتِ بسهولةٍ وحفظها. تأتي الأجهزةُ الحديثةُ بنوعين من القرص الصّلب: القرص الصّلب من نوع HDD لاستخدامه كمخزن للملفّات والبينات. يُفضّل أن يصل الحجم إلى (1 تيرا بايت). القرص الصّلب SSD الّذي يُستخدم لإقلاع النّظام وتسطيب البرامج. هذه الأقراص SSD أكثر تحمّلًا، ولا تُصدر صوتًا، وأسرع في القراءة وإقلاع النّظام، وتستخدم تيارًا كهربائيًّا أقل، ومستويات تحمّلها لدرجة الحرارة أعلى. يعيبها: سعرها المُرتفع وقلّة مساحتها. -- بطاقة الرسومات Graphics Card بطاقة الرسومات Graphics Card: ليست العنصر الأكثر أهميّة ما لم تعمل مع الرّسوم المُتحرّكة. مع ذلك، هناك تطبيقات تستفيد من قوّة المُعالج لتعمل على وجهٍ أفضل. لا تُؤثّر بطاقة الرّسومات في سرعة التّصيير (الريندر Render ) إنّما تُؤثّر في حركة الملفّات والتّنقل أثناء العمل. كرت الشّاشة هو المسؤول عن توليد الصّور وإخراجها على شاشة الكمبيوتر، وكلّما كان إصدار الكرت حديثًا كانت الصّورة عالية الدّقة. أفضل شركتين لصناعة كروت الشّاشة، هما شركتي nVidia و AMD، نيفيديا أفضل لذلك سعرها أغلى. عند الشّراءِ ركّز على: الحجم: ذاكرة بحجم 2-4 جيجا مُناسب جدًّا. النّوع: الأفضل هو GDDR5. سرعة التوقيت GPU Clock: (سُرعة مُعالجة الجرافيكس).، دقة الشاشة Max Resolution: قد تكون HD أو Full HD. أحدث إصدار من DirectX (تعريفات مُهمّة لعمل الألعاب). على Shaders (يُحدِّد جودة الصّورة ووضوحها). على Bandwidth (كميّة المعلومات الّتي تُعالج في الثّانية الواحدة). تنصح أتوديسك: DirectX 10 capable graphics card with Shader Model 3. -- الشاشة Monitors الشّاشة Monitors: قرار حجم الشّاشة ودقّتها يعود إليك. كلّما كبرت الشّاشة وزادت دقّتها ارتفعت القدرة على رؤيّة التّفاصيل من دون الحاجة إلى التّكبير. الخياراتُ الآتية هل الأفضل: حجم الشّاشة 24 إنش، بدقّة (1920*1200) بكسل. حجم الشّاشة 27 إنش، بدقّة (2560*1440) بكسل. -- الفأرة Mouse يدُك الّتي تستخدمها في إدارة عمليّاتك عند استخدام الحاسب الآلي في مجال التصميم؛ لذلك يجب اختيار الماوس المُناسب والمُريح ليدك. أنواع (الماوسات) عديدة وتقنياتها مُختلفة؛ إلّا أنّني أنصح بالنّوع: ماوس الليزر Laser Mouse، وأن يكون Wireless من دون أسلاكٍ وبمنفذ USP، وبدقّة ما بين (1500 dpi) إلى (2000 dpi)، ومن شركة Logitech أوMicrosoft، وبأربعة أزرار، زرّي الماوس الأيمن والأيسر، وزرّين جانبيّين؛ لتمكين تخصيصهما، إضافةً إلى عجلة الماوس. يمكنك متابعة هذا الفيديو أيضًا لتتعرف على أفضل مواصفات لأجهزة الكمبيوتر اللازمة لأغراض التصميم
  24. ,Hello there If a company is starting-up, then there is a long way to go. In this highly competitive environment, companies devoid of online presence hardly hold chances of success. We were required to go a bit aggressive to get our products and services promoted. InfoSky Solutions is one the best to get your problems sorted out. If you are in need of bulk SMS services to enhance your reach and attract more number of traffic, then you may take a chance with InfoSky Solutions. SMS communication services will be offered to you straight way from computer systems in a hassle free manner. With an array of cost effective tools, it is expected that the gateway towards reaching enhanced number of clients will get enhanced. Multi package Bulk SMS Services at reasonable rate with 100% delivery ratio is now within your clenched fist. Its services can be easily accessed from anywhere as per convenience. It is essential to get in touch with a team that is always in a ready state to assist you in each and every corner. Bulk SMS is offering businesses a unique opportunity to carry on with a highly promotional strategy in terms of: Convenience Simplicity Cost effectiveness Getting engaged with audience through cell phones is now a cup of tea. You can feel the power of short messaging services after getting in touch with a reliable service provider! The demand for custom bulk SMS has been on the increase for some time now. This is due to the ease by which users can reach out to thousands of recipients with a single click as well as the relative cheapness of custom bulk SMS when compared with the SMS rates charged by telecom service providers. Many individuals now use bulk SMS to greet friends and relatives during festive seasons and to spread other messages. Businesses now reach out to their customers and potential customers by way of bulk SMS. KAPSYSTEM is the best globa wide bulk SMS provider company. They provide you the best white label platform to start your own business. Visit them on www.kapsystem.com. Resource
×
×
  • أضف...