لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 11/10/20 في كل الموقع
-
مرحباً عبد الواحد ، أظن أنه من الأحسن دراسة الوضع جيداً فالشخص لا يشتري حاسوب كل يوم لذلك لو كان بإمكانك الحصول على جهاز بخصائص أعلى سيكون أفضل لك فمثلاً لو إستطعت شراء جهاز ب 16 غيغابايت سعة الذاكرة العشوائية (RAM) و قرص تخزين من النوع ssd سيكون أحسن لأن إقلاع الجهاز و فتح البرامج سيكون أسرع بكثير من قرص التخزين من النوع hdd. الأمر كله يعتمد على إمكانياتك و الميزانية التي تستطيع توفيرها، في ما مضى كنت أستخدم جهاز كان المُعالج فيه i3 من الجيل القديم و الذاكرة العشوائية 4 غيغابايت و قرص تخزين hdd لم تكن عملية التطوير أسرع لكن كنت ابرمج به ويب و كان يؤدي الغرض. ملاحظة: المُعالج i5-8250U جيد و أفضل بكثير للبرمجة فهو رُباعي الأنوية و يفي بالغرض و أداؤه أفضل من بعض مُعالجات i7 ماتحت الجيل السابع نعم هو ليس مُناسب للأشخاص الجيمرز أو مُحررين الفيديو أو مُطورين الألعاب يُنصح هؤلاء الأشخاص بإستخدام مُعالجات من السلسلة Xeon E او H(الجيل الثامن فما فوق) بإمكانك التفكير أيضاً في مُعالجات AMD الشركة المُنافسة ل Intel لكن يجب ان تكون السلسلة هي AMD Ryzen لأنها تُقدم نفس أداء مُعالجات intel الأجيال الحديثة. بالتوفيق.3 نقاط
-
مرحباً بك، لا أحد يستطيع الإجابة على هذا السؤال لأنه لا أحد يعلم الغيب أو يستطيع التكهن لما سيحدث بعد 5 سنوات، إختر تخصصك حسب رغبتك و حسب ميولك الشخصي لأنه إذا أحببت مجالك ستُبدع فيه، لو سألت هل تخصص هندسة البرمجيات مطلوب الآن أجيبك نعم هو مطلوب فهناك العديد من الشركات التي تبحث عن موظفين في هذا المجال و هناك العديد من الشركات الناشئة التي تأسست في هذا المجال، لذلك إن كنت مُهندس برمجيات مُحترف في مجالك فالشركات هي التي ستبحث عنك ولو كنت شخص لديك خبرة كبيرة في المجال فعملك و خبرتك هي التي ستُسوق لك و تجعلك أنت من يختار مكان عملك لذلك فالأفضل لك إن كنت قد اخترت هذا المجال ان تٌركز على إكتساب أكبر قدر من الخبرة و المهارات المطلوبة في مجالك أما إن كنت تريد إختيار هذا المجال فعليك إختياره برغبة و لأنك تُحبه. ليس كل الناس تذهب لهذا التخصص و ليس كل من يختار هذا التخصص يُصبح مؤهل فالشركات لم تعد تهتم للمُسمى بقدر إهتمامها بما يملكه الشخص من مهارات و ما الذي سيُضيفه لها و ما الذي ستستفيد منه. أتمنى لك التوفيق.2 نقاط
-
المعالج جيد و مناسب لبرمجة الويب , أنا أستخدم معالج من نوع u لا يوجد أي مشاكل و Ram أيضا مناسبة ما لم تحتاج لدخول لتطوير الأندرويد أو لإستخدام محاكي أو لإستخدام برامج التصميم لو كنت تريد ذلك يمكنك إضافة Ram على الحاسوب لتصبح 16على جهازك .2 نقاط
-
محتوى الـLog (سجل الاخطاء) طويل ويُظهر عدة مسارات ستساعدني كثيراً في حل المشكل لو تذكر لي محتوى الاسطر بالظبط التي تظهر فيها الاخطاء وهل احد هذه الاسطر هو الكود الذي اقترحته عليك1 نقطة
-
السلام عليكم أيها المُحترفون في حسوب : ) بحكم استخدامي للوردبريس منذ 2014 ومرتاح معه - فكرت بإنشاء منتدى مصغر من خلال bbress الإضافة الخاصة بذلك ولا أدري عن مدى كفاءتها هل فعلاً يمكن أن تنفعني أم ألجأ لبرامج منتديات مدفوعة .. هل المنتديات الآن يمكن اعتبارها مفيدة علماً ان المنتدى الذي في بالي ضمن مدونتي ستكون (صفحة من صفحات الموقع) ولكن لا أدري هل سيكون هـنـاك تفاعل ورغبة من الزوار أم وسائل التواصل الاجتماعي فعلاً غيرت المفهوم وباتو يفضل الجميع استخدامها ، بالرغم من سلبيات أجدها في وسائل التواصل: 1- المحدودية في البوستات. 2- المنشورات العامة التي قد تختلط مع الفكاهة ومواضيع مختلفة. 3- والأهم ليست مكاناً يمكن الاعتماد عليه في توفير منصة أو بيئة تكون مرجعاً مفيداً للرجوع إليه. فإضافة لذلك 1- ما هو أفضل برنامج منتدى مصغر بسيط يكون مناسب لموقع مُدار بالووردبريس ؟ 2- هناك منتديات انتشرت مثل الذي تستخدمه موقع ترو جيمينج Xenforo يمكن دمجها مع الموقع 3- ما هي المنصة المُستخدمة لدى موقع ترو جيمنج للواجهة الرئيسية ؟ شُكراً لكم1 نقطة
-
مرحباً, سأتحدث عن إضافة bbpress الموجودة على wordpress, هي فعلاً إضافة جميلة ويكفي قولاً انها مُبرمجة بنفس فريق wordpress وبالتالي فلن تجد إضافة أكثر اماناً وثباتاً من bbpress, لكن عيبها الوحيد هو ضخامتها فالإضافة تستهلك كثير من متطلبات الإستضافة ويزيد الإستهلاك بزيادة الزيارات للموقع وبالتالي إذا كنت ستعتمد bbpress فعليك إعتماد إستضافة جيدة وقوية (أنصح بـسرفرات VPS) في حالتك إذا كنت ستقتصر على فكرة المنتدى فقط .. أي لن يكون هناك متجر في الموقع أو خدمة أخرى كالإشتراكات فأنصح بإعتماد منصة منتديات جاهزة والإبتعاد عن wordpress, و Xenforo أثبتت جدارتها في الأونة الأخيرة خصوصاً بعد أخر تحديث حيث أصبح الشكل أكثر سلاسة وسهل الإستخدام والإدارة + إزدادات تصاميم المنتديات التي تعمل بهذه المنصة وبالتالي سيكون امامك عدد كبير من الخيارات بخصوص التنسيق أحب ان اصحح لك نقطة وهي أن المنتدى الذي ذكرته لا يعتمد Xenforo بل هو يعمل بنظام Wordpress والقالب مُصمم برمجة خاصة بالتوفيق1 نقطة
-
مبدئياً نعم, يجب ان يعما العداد حتى بعد إغلاق التطبيق لكن في حال لم ينجح الأمر معك تستطيع إعتماد مصفوفة Android_Alarm_Manager لكن هذه فقط لأجهزة الأندرويد مُرادفها في الـIOS هو UIBackgroundModes مع إعتماد setKeepAliveTimeout:handler: لإعادة تشغيل الأمر فور إغلاق التطبيق (من طرف النظام) وكإضافة وبعيداً عن موضوع العداد, إذا كنت ستحتاج مثلاً إحداثيات المستخدم في كل مرة ولديك كود يقوم بالعملية في الخلفية فستحتاج طلب موافقة (الصلاحية) من المستخدم وبالتالي النظام لن يقوم بإيقاف أوامر التطبيق حتى بعد غلقه, أنصحك بقرائة التعليمات الخاصة ببرمجة تطبيقات الهواتف التي تعمل إما Android او IOS1 نقطة
-
1 نقطة
-
وعليكم السلام @صالح قريشه يفضل كتابة التعليقات فقط للأسئلة وذلك لكي لايشعر الطالب بالضياع بكثرة التعليقات عندما تواجهه مشكلة يصعب حلها، في بعض الأحيان يلجىء الطالب لمشاهدة التعليقات لعله يجد جواب سؤاله في التعليقات أسفل الدرس. لهذا السبب يفضل استخدام التعليقات للأسئلة فقط. وشكرًا.1 نقطة
-
لا اظن ذلك فما قلت ان التخصص يُقبِل عليه الكثير من الطلبة لذا فهو تخصص مطلوب ويحتاج إليه سوق العمل حتى لو مر على ذلك خمس سنوات, فالأعمال التي تتطلب مهندس برمجيات كثيرة والسوق يحتاج للمطورين والمبرمجين لتلبية طلباتهم. ولكن ليس كل الناس عند دراستها لهندسة البرمجيات تُوفق به فربما ذهب لهذا التخصص فقط لركوب الموج مع الآخرين ويجد نفسه ان هذا المجال ليس له فالمميزين هم من ينجحون في النهاية. ولكن اذا وصلنا الى مرحلة يمكن لأي شخص تطوير موقع بطريقة سهلة وبسيطة مشابهة لل Wordpress فقد يقل الطلب على المهن التي تتطلب لمهندس البرمجيات إلا في حال كان المطلوب أنظمة كبيرة.1 نقطة
-
مرحباً, بدايةً يجب توضيح أن اللغة التي بُرمج بها Flutter تُسمى Dart وهي لغة من بين عدة لغات مُعدة بنظام العرض-المترابط او المتزامن وهو نظام يُركز على تنفيذ الأوامر سطراً بسطر وحفظها سطر بسطر, كما هو الحال بالنسبة للزر الذي يحسب عدد مرات الضغط عليه وهذا رابط لمقال مُفيد جداً يشرح الموضع بتعمق : Dart والبرمجة المتزامنة لكن ما علاقة هذا بسؤالك؟ العلاقة هي أنه بفهم الطريقة التي بُرمج بها Flutter نستطيع إيجاد حل للمشكل الحل هو إعتماد خاصية العزل (Isolate) في تنفيذ الأمر الذي تريده (وفي حالتك إبقاء العداد شغال في الخلفية) , هذه الخاصية عند إضافتها في Dart ستسمح بتنفيذ أوامر في الخلفية بشكل منعزل عن باقي الأوامر التي يحتاجها التطبيق أثناء التصفح ويمكن تشغيل هذه الأوامر بصفة دورية (مثلاً كل 1000 جزء من الثانية). والتالي هو مثال لكود العزل الذي نتحدث عنه, تستطيع نسخه وإعتماد نفس المبدأ في تنفيذ فكرة الـTimer import 'dart:io'; import 'dart:async'; import 'dart:isolate'; Isolate isolate; void start() async { ReceivePort receivePort= ReceivePort(); // مدخل العازل لإسقبال الرسائل isolate = await Isolate.spawn(runTimer, receivePort.sendPort); receivePort.listen((data) { stdout.write('إستقبل: ' + data + ', '); }); } void runTimer(SendPort sendPort) { int counter = 0; Timer.periodic(new Duration(seconds: 1), (Timer t) { counter++; String msg = 'إشعار ' + counter.toString(); stdout.write('أرسل: ' + msg + ' - '); sendPort.send(msg); }); } void stop() { if (isolate != null) { stdout.writeln('حذف العازل'); isolate.kill(priority: Isolate.immediate); isolate = null; } } void main() async { stdout.writeln('جاري إعادة بدأ العازل'); await start(); stdout.writeln('إضغط أي رمز للخروج...'); await stdin.first; stop(); stdout.writeln('وداعاً'); exit(0); } بالتوفيق1 نقطة
-
مرحبًا عبد الواحد. لا أنصحك أبدًا بمعالج من النوع U فهذه المعالجات أداؤها متواضع جدًا "و قد قمت بتجربتها شخصيًا" و ستسبب لك الكثير من المشاكل و الإزعاج و ثِقل بالجهاز أثناء عملك، أنصحك بأن تبحث عن جهاز المعالج الخاص به من النوع H. أيضًا من الأفضل أن لا تقل ال RAM عن 16GB يمكنك استخدام جهاز ال RAM الخاص به 8GB لكن ستعاني بعض المشاكل و الثِقل في بعض الأحيان1 نقطة
-
مرحبا إباء، أظن المشكلة تتعلق بمسار ملف CSS المضمن في صفحات HTML. ربما قد سبق و ووضعتي مسار مطلق للملفات CSS أي مسار يتضمن اسم القرص و المجلدات الفرعية .. مثل: D:/web/MyNwProject/MyHTML/index.html بدل وضع مسار نسبي يصف العلاقة المباشرة بين الملفين فإذا كان مثلا اسم ملف CSS هو style وموجود في مجلد MyHTML فيكتفى بوسع اسم الملف في مكان الرابط مثال <head> <link rel="stylesheet" href="style.css"> </head> أما في حال وجود ملف CSS ضمن مجلد مختلف لنفرض MyStyle موجود ضمن MyProject سيكون ربط الملف.. D:/web/MyNwProject/MyStyle/style.css فيكون تضمينه بشكل نسبي ضمن ملف HTML بالشكل التالي: <head> <link rel="stylesheet" href="../MyStyle/style.css"> </head> حيث تستعمل النقطتين للرجوع للمجلد الأب الذي يحوي مسارنا الحالي.. تأكدي من مسار الملفات و سيعمل المشروع بالتأكيد يمكنك البحث أكثر عن المسارات (مسار مطلق - مسار نسبي - Absolut path - relative path ) بالتوفيق1 نقطة
-
مرحبا عبد الواحد، أهم شيئ هو حجم الذاكرة RAM وعلى الأقل يجب أن تكون 8 غيغابايت أو أكثر المعالج i5-8250U جيد ويفي بالغرض، المعالج الخاص بي i5-7200U و هو جيد الأهم هو الميزانية في قدرتك على شراء جهاز أقوى بالتوفيق1 نقطة
-
عند تغيير أحد أبعاد الفيديو يتغير البعد الآخر بسبب خيار الحفاظ على تناسب الأبعاد aspect ratio في حال وجود هذا الخيار أرجو إلغاء تفعيله و سيفك الربط بين طول و عرض الفيديو عند التعديل بالتوفيق1 نقطة
-
افضل برنامج لتعلم لابرمجة فى نظرى هو visual studio code1 نقطة
-
إضافاً إلى ما ذكره الأخ وليد فأنصحك بالاعتماد على محرر أكواد واحد لأن كل محرر أكواد لديه إختصاراته الخاصة التي ستسهل عليك البرمجة وتزيد من إنتاجيتك وكفاءتك في العمل وايضا يمكنك تنسيق وترتيب والتحكم بشكل الكود وحجمه والثيمات المستخدمة التي ستريحك في الاستخدام حسب ما يناسبك. فلتقم بتجريب المحررات المذكورة أعلاه ثم استقر على أحدهم وتعلم إختصاراته وجميع خفاياه التي يمكنك البحث عنها بسهولة.1 نقطة
-
أولاً برمجة الويب لا تحتاج إلى جهاز قوي لكي تتعلمها فقط أياً كان الجهاز يمكنك أن تتعلم برمجة الويب عليه . ونحن نستعمل لكتابة الأكواد برنامج يسمى محرر أكواد ويوجد العديد من هذه البرامج ومنها : Visual Studio Code Atom Brackets SublimeText وأيضاً سوف تحتاج متصفح ويوجد العديد من المتصفحات الاحترافية التي تقوم بالغرض لعرض المحتوى أثناء كتابة الأكواد والبرمجة ومنها : Google Chrome Firefox Developer Edition يمكنك البحث على أي من هذة البرامج في جوجل وسوف تعثر على لينك التحميل فجميعها مجاناً . أنصحك بالتعامل مع محرر أكواد Visual Studio Code . بعد إتمام تحميل محرر الأكواد والمتصفح فيمكنك أن تبدأ بالتكويد والتعلم ولا يتبقى لك شئ فقط محرر أكواد ومتصفح .1 نقطة
-
مرحباً صلاح، مسألة تسليم ملفات المشروع للعميل تختلف على حسب نوعية المشروع و طلبات العميل في حد ذاته، أحياناً يكون المشروع عبارة عن ملف اكسل أو دراسة جدوى أو تصميم شعار أو مقطع فيديو و غيرها من المشاريع من هذا النوع فأنت في الأخير مطالب بتسليم هذه الملفات لصاحب المشروع عن طريق إرسالها له في صفحة إدارة المشروع بتنظيم هذه الملفات حسب الشيء الذي تراه مناسب، أحياناً أخرى يكون المشروع عبارة عن برمجة موقع أو تصميم قالب أو برمجة تطبيق هاتف و هنا قد يطلب منك العميل من خلال متطلبات المشروع رفع الموقع على إستضافته أو رفع التطبيق على المتجر المخصص له سواء متجر apple أو متجر Google إضافة إلى هذا انت مطالب بتسليم الكود المصدري للمشروع من خلال إرساله في صفحة إدارة المشروع حتى تتمكن الإدارة من معرفة ذلك، أحياناً أخرى قد يطلب منك العميل إذا كان شخص له من المعرفة في هذا المجال وشخص فاهم للتقنية: مزامنة المشروع مع مستودع GitHub أو Bitbucket أو gitlab أو غيرها من المنصات و قد يطلب منك رفع العمل لتجربة المستجدات على إستضافة كل خمسة أيام أو أسبوع على حسب الشخص. و هذا ما أفعله شخصيا: مزامنة المشروع مع مستودع GitHub حتى لو لم يطلب العميل ذلك ربط المستودع مع إستضافة مجانية و تسليم رابط الموقع للعميل و كل ما أضيف خصائص جديدة أخبر صاحب المشروع عنها حتى يجربها بنفسه و يبدي رأيه بعد الإنتهاء من متطلبات المشروع ارفع العمل على إستضافة العميل ضغط ملفات المشروع و إرسالها في صفحة إدارة المشروع (إن كان العمل ضمن منصة عمل حر) طلب إنهاء المشروع ( غالبا لا أقوم بها بل العميل بنفسه ينهي المشروع) بالتوفيق.1 نقطة
-
الأمر يختلف من عميل لآخر، ففي كل مشروع سيخبرك العميل عن الطريقة التي يريد استلام المشروع بها، فمثلًا: في بعض الأحيان تقوم بتسليم المشروع على هيئة مجلد مضغوط مثلًا. في بعض الأحيان العميل يطلب أن يتم رفع الملفات على مستودع github. في بعض الأحيان تقوم برفع المشروع على c-panel أو استضافة و تسلمه إياها و بعد ذلك يقوم هو بتغيير كلمة المرور.1 نقطة
-
يمكنك الحصول على ملايين الزوار فقط عن طريق وسائل التواصل الاجتماعي التي غيرت قواعد اللعبة في عالم التسويق, وحتى تزيد من عدد زوار مدونتك فقد عملت على جمع لك أكثر من 20 نصيحة من مصادر أجنبية مختلفة عليك باتباعها حتى تزيد من عدد زوارك وهي: إستهدف جمهوراً من المرجح أن يشارك المحتوى مع آخرين. إشترك في المجتمعات التي يتواجد بها جمهورك بالفعل. إجعل محتوى موقعك صديق لمحركات البحث. إستخدم تويتر و فيس بوك وجوجل بلس لتشارك تدويناتك ولتجد فرص بيع جديدة. إصنع حساب أنالاتيكس Google Analytics وراقب النتائج بانتباه. أضف الرسومات البيانية والتوضيحية والمخططات والصور (مع ذكر المصدر). ضع في اعتبارك الكلمات المفتاحية الرئيسية وأنت تكتب مقالاتك. قم بوضع رابط لمدونتك في المواقع و المدونات الأخرى. إشترك في مجتماعات المشاركة Sharing Communities مثل Reddit و StumbleUpon. إستخدم مبدأ “المدون الضيف” و اقبل تدوينات الآخرين. إجعل تصميم موقعك تصميماً مميزاً. تفاعل مع تعليقات المدونات الأخرى. إنضم لمواقع (س. ج.) أو أنت تسأل والموقع يجيب. فعّل الإشتراك في الـ RSS والقوائم البريدية. كن حريصاً على حضور واستضافة الأحداث الهامة. إستخدم بريدك الإلكتروني في تسويق مدونتك. إستفت قرائك. أضف قيمة خاصة للمقالات ذات الشعبية العالية. جمّع واعرض أفضل ما في الشريحة التي تكتب فيها. أربط ملفاتك على المفضلات الإجتماعية بمدونتك. وأخيرا وبخصوص الأرباح فالأفضل لك أن تستعمل إعلانات غوغل أدسنس وإعلانات حسوب بما فيها إستعمال بانرز تعلن فيها للأخرين.1 نقطة
-
توجد عدة لجذب الزوار. أهمها: قم بنشر مقالات حصرية بكثافة بشكل دوري بدل ان تنشر 10 مقالات في يوم واحد أنشر مقالين كل يوم هكذا سيتعود جوجل على الزحف لموقعك بشكل دوري. إقرأ عن SEO وحاول أن تطبقها على موقعك فهذا يساعد كثيرا في نشر موقعك على محرك البحث. قم بمشاركة موقعك على وسائل التواصل الإجتماعي. إقرأ قليلاً عن الباكلينكس وحاول ان تنشر روابط موقع في مواقع جيدة. هذي أهم النقاط إن قمت باستخدامها جيداً سيزداد عدد زوار موقعك. عندها يمكنك التقدم لأدسنس للربح من الإعلان أو تقوم ببيع أغراض مقابل عمولة على موقعك.1 نقطة
-
مقالك حفزني جدا لدراسة البرمجة. بدأت بلغة بايثون و حققت في مدة عشرة أيام نتيجة طيبة لم أكن أتوقعها من قبل غير أن تعلم البرمجة تستهلك وقتا كبيرا قد تصل لسبع أو ثماني أو تسع ساعات ساعات أحيانا مع احتساب الاستراحات القصيرة طبعا والوجبات و الصلوات في وقت التعلم. فالبرمجة يلزمها التفرغ الكامل لاحترافها. ما يلزم المبتدئ هو التفكير المنطقي و التأمل في كل كود تتم كتابته أثناء التعلم و إعادة كتابته مرارا و التلاعب به و إدخال بعض الأكواد الصغيرة لترسيخها كي لا تنسى. كما يجب تكرار ما تعلمته يوم أمس و مراجعته و كتابة أكواد مشابهة له ثم البدأ في الدرس الجديد كما لا ينبغي الاستهانة بأي خطوة فيجب فهمها حتى لا تسبب مشاكل في المستقبل , فالغرض الإتقان و ليس الاطلاع فقط. فنصيحتي لك أيها مقبل على تعلم البرمجة أن تبدأ يومك بقراءة وردك من القرءان الكريم و صلاة ركعتين و دعاء الله الفهم و الصبر و العزيمة فإذا استعصى عليك أمر في التعلم حاول أن تحلها (هو أمر يسبب النرفزة )فإن لم تنجح في ذلك إياك أن تفشل و تترك الأمر . إذهب فتوضأ و ادع الله و تنفس هواء نقيا ثم ارجع فسيفتح عليك فيه فأنا أتكلم عن تجربة يا إخواني1 نقطة
-
جزاك الله خيرا على هذا الدليل الشامل المتكامل لتعلم البرمجة.. فعلا النصائح الأخيرة التي ذكرتها مهمة جدًا، ونابعة من رجل ذو خبرة في المجال.. يؤخذ على المقال أن المصادر كانت مركزة على "حسوب" ومنتجاتها فقط، والواقع أنها ليست أفضل المصادر لتعلم البرمجة، خاصة لذوي الدخل الضعيف والمعدوم.. وحتى "الموسوعة" فتصلح كمرجع عند الحاجة لا كمصدر للتعلم.. وأمر آخر أنها باللغة العربية مما يصعب فهم البرمجة برأيي.. لا لأنها بالعربية لكن بسبب ترجمة المصطلحات وطبيعة لغات البرمجة نفسها؛ إذ هي مكتوبة بالإنجليزية.. ومن هنا أنبّه على ضرورة تعلم الإنجليزية ولو بمستوى أوّل لأن المصادر المحدَّثة أغلبها بالإنجليزية.. ملحوظة أخرى وددت لو ذُكرَت في المقال هي الخطة المفصلة لتعلم البرمجة؛ مثلا: HTML5 ثم CSS3 ثم JAVASCRIPT ثم التدريب على مشاريع، ثم PHP7 مثلا وهكذا... على كل مقال موفق، ومرة أخرى جزاك الله خيرا على مجهوداتك الجبارة. حياك الله.1 نقطة
-
استضافة المشروع على الويب تختلف في كثير من نواحي عن البيئة المحلّيّة أثناء التّطوير، علينا أخذ عدّة أمور في عين الاعتبار قبل أن يصبح مشروعنا جاهزًا للنّشر (deployment). الأمان والحمايةعندما طوّرنا المشروع، لم نلقِ بالًا لمواضيع الحماية والأمان (سوى تجزئة كلمة المرور)، لأنّ الطّلبات في بيئة التّطوير تصدر وتعود للجهاز نفسه دون خوف من مرورها على جهات أخرى، أمّا على الويب فإنّ الطّلبات ستمرّ عبر عشرات ومئات بل ربّما آلاف الأجهزة قبل أن تصل للطّرف الآخر. ولذا علينا تنفيذ ما يلي كحدّ أدنى لحماية خادومنا والمستخدمين في وقت واحد: استخدام HTTPS: عند إنشاء المستخدم لحساب جديد أو تسجيله دخوله، يجب أن تنتقل كلمة المرور مُعمَّاة (encrypted) من المتصفّح للخادوم لكي لا تستطيع أطراف أخرى، مثل مزوّد خدمة الإنترنت أو مُخترقي الشّبكة، الاطّلاع عليها أثناء انتقالها، وهو ما يمكن تحقيقه باستخدام بروتوكول HTTPS، كيفيّة اعتماد HTTPS على الخادوم أمر خارج عن نطاق هذه السّلسلة. صلاحية الجلسات: ذكرنا أنّه من المُفضّل فرض حدّ على صلاحيّة الجلسة يتمّ بعدها إعادة طلب تسجيل الدّخول من المستخدم. إذا استطاع مخترق ما الوصول إلى جهاز المستخدم أو سرقة الكعكات من متصفّحه، فسيصبح بإمكانه انتحال شخصيّة هذا المستخدم والتّعليق باسمه أو إضافة التّدوينات إن كان الكاتب يملك هذا الإذن. التحقق من البريد الإلكتروني: لم نطلب من المستخدم عنوان بريده الإلكتروني عند إنشاء نموذج التّسجيل في الموقع لغرض تبسيط الدرس، ولكن من الأفضل طلبه مع التّحقّق من صحته بإرسال رسالة تحوي رابط التّحقّق وذلك لحماية المدوّنة من الهجمات الآلية الّتي تهدف إلى خلق ضغط على الخادوم أو إغراقه بالتّعليقات غير المرغوبة. الأداءالتخزين المؤقت (caching): الحواسيب اليوم سريعة للغاية، لا سيما الخواديم، معالجات بقدرات هائلة وأحجام كبيرة من الذاكرة وسعة التّخزين، لكن المشكلة الوحيدة الّتي لا تزال تؤثّر على أدائها، على الرّغم من كلّ التّطوّرات في السّنوات الأخيرة، ما تزال أقراص التّخزين، نعم هناك أنواع جديدة من الأقراص (SSD) تقدّم سرعات أكبر، لكنّها ما تزال مُكلفة وغير شائعة على الخوادم، في كلّ استعلام لقاعدة البيانات سيذهب خادوم MySQL إلى القرص ليجلب النّتائج، وهذا يعني أنّ كلّ صفحة يزورها كلّ مستخدم ستتطلّب على الأقل مرورًا واحدًا على القرص، وإذا كان القرص ميكانيكيًّا، وهي الأقراص الأكثر شيوعًا في الحواسيب إلى اليوم، فإنّ هذا سيستغرق وقتًا ملحوظًا. من الأفضل تخزين النّتائج للاستعلامات الشّائعة والّتي لا تتغيّر كثيرًا (كنصّ التّدوينة، ومعلومات المستخدمين) في الذّاكرة (RAM) لأنّها كبيرة الحجم عادةً، وأسرع بكثير من الأقراص الصّلبة. يمكننا تخزين هذه النّتائج بأسلوب بدائي بشكل كائن JavaScript ضمن متغيّر يبقى ضمن الذّاكرة، لكنّ هذا الحلّ ليس عمليًّا، لذلك وُجدت العديد من الحلول الّتي تعتمد بنية خادم/عميل مثل Redis وMemcached، ببساطة يمكن تخزين نتائج الاستعلامات في قاعدة بيانات Memcached الّتي تعمل في الذّاكرة، والخادوم يتولّى إدارة مساحة الذّاكرة وتوزيعها على عدّة حواسيب إن تطلّب الأمر، كما في المواقع الضّخمة. العديد من المواقع الكبيرة تستخدم Memcached، منها Google وTwitter وWikipedia.من الوسائل الأخرى لتسريع عمل الموقع أن نطلّب من المتصفّح تخزين الملفّات الّتي لا تتغيّر كثيرًا لفترة أطول قبل أن يجلبها من جديد، يمكن القيام بهذا من خلال ترويسات في جواب HTTP تُدعى بترويسات إدارة الذّاكرة المؤقتة (Cache Control Headers)، يمكن أن نطلب من المتصفّح على سبيل المثال أن يُخزّن ملفّ style.css لمدّة 10 أيّام على جهاز المتصفّح بحيث لا يضطّر لجلبه مجدّدًا لكلّ صفحة يزورها المستخدم. في Express يمكن استخدام خيار maxAge للوظيفة static() لتعيين المُدّة القصوى لتخزين الملفّات الثّابتة مُقدّرة بالميلي ثانية: app.use(express.static(__dirname + '/public', { maxAge: 60 * 60 * 24 * 1000 }));وأمّا لطلباتنا الأخرى، فيكمننا تعيين قيم ترويسات الجواب بالطّريقة التّالية: response.set("Cache-Control", "private, max-age=3600"); أو: response.set({ "Cache-Control": "private, max-age=3600, must-revalidate", "Expires": "Tue, 13 Jan 2015 21:49:10 GMT" }); إضافة الفهارس لقاعدة البيانات: قاعدة البيانات لدينا ما تزال صغيرة ولا تحتوي الكثير، لكنّنها ستتضخّم مع زيادة التّعليقات والتّدوينات والمستخدمين بلا شكّ، وعندها سيصبح من الضّروريّ إضافة الفهارس على الأعمدة الأكثر استعلامًا لتسريع جلب النّتائج. يمكن تشبيه الفهارس في قواعد البيانات بالفهارس في الكتب؛ إذا أردت الوصول إلى قسم معيّن في كتاب ضخم، فإنّك ستفضّل الاطّلاع على الفهرس، لأنّ ذلك أسرع من المرور على كلّ أقسام الكتاب، على الرّغم من أنّ الفهرس قد يتطلّب بضع صفحات إضافية من الكتاب، الّتي يمكن تشبيهها بمساحة تخزين إضافيّة على القرص. تقليص الملفات: قد يصبح حجم وعدد ملفّات المشروع الّتي ستصل للمتصفح مثل ملفّات CSS وJavaScript كبيرًا مع تطوّر المشروع، على الرّغم أنّنا لم نستخدم أيّة مكتبات JavaScript ضخمة أو خطوط ويب كبيرة الحجم، إلّا أنّنا سنفعل ذلك في المشاريع الواقعيّة غالبًا، عندها ستصبح الحاجّة لتقليص حجم هذه الملفّات وجمعها أمرًا له ما يُبرّره، المتصفّحات لا تهتمّ إن كانت ملفّات CSS الّتي تصلها خمسة أو واحدًا، ما يهمّها هو المحافظة على ترتيب سطور الشّيفرة، كما أنّها لا تهتم بالفواصل والمسافات في ملفّات JavaScript، ولا حتّى بأسماء المتغيّرات طالما استخدمت الأسماء نفسها، وهذا هو مبدأ التّقليص (minification) والجمع (concatenation)، لنأخذ نصّ JavaScript كهذا: var myVeryLongVariableName = "something"; function doSomething() { return myVeryLongVariableName; }بعد تقليص هذا الملفّ: var a="something";function doSomething(){return a;}بالطّبع سيصبح فارق الحجم بين الملفّين كبيرًا مع تضخّم الشّيفرة وزيادة تعقيدها. كلا الشّيفرتين تؤدّيان المهمّة ذاتها على المتصفّح، ولكن الأخيرة ستقلل من حجم طلب HTTP وهو ما ينعكس على سرعة تحميل الموقع وبالتّالي على قبول المستخدم للموقع وتجربته. تتوفّر في Node.js الكثير مع الوحدات الّتي تنفّذ مهمّات الجمع والتّقليص لمختلف لغات الويب، ولعلّ من أشهرها UglifyJS لنصوص JavaScript، وclean-css لملفّات CSS. أمّا كيفيّة استخدامها وأتمتتها فهو موضوع خارج عن نطاق هذه السّلسة. استخدام وسائل ضغط مثل gzip: وهي آليّة لضغط الصّفحات لتقليص حجمها ثمّ تعيين ترويسة Encoding في جواب HTTP لتُشير للمتصفّح بأنّ المحتوى المنقول مضغوط، وسيقوم المتصفّح الّذي يدعم هذه الآليّة بفكّ ضغطه ثمّ التعامل معه كأيّ جواب آخر، يتعرّف الخادوم على المتصفّحات الّتي تدعم gzip عبر ترويسة Accept-Encoding، أمّا المتصفّحات الأخرى فتُرسل لها الإجابة دون ضغط. معظم المتصفّحات الحديثة تدعم gzip، وتتوفّر لـExpress الوحدة compression للقيام بالمهمّة تلقائيًّا. ملفات المشروعللحصول على نسخة من ملفّات المشروع لتجربتها محلّيًّا والتّطوير عليها، يمكن عمل فرع عن المشروع أو استنساخه من صفحته على GitHub.1 نقطة