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

لوحة المتصدرين

  1. Ail Ahmed

    Ail Ahmed

    الأعضاء


    • نقاط

      16

    • المساهمات

      1202


  2. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      7

    • المساهمات

      13209


  3. ياسر مسكين

    ياسر مسكين

    الأعضاء


    • نقاط

      6

    • المساهمات

      1071


  4. محمد عاطف17

    محمد عاطف17

    الأعضاء


    • نقاط

      3

    • المساهمات

      3124


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 10/26/24 في كل الموقع

  1. هذا السؤال يثير فضولي منذ مدة. و هو كيف تمت برمجة مواقع شركة حسوب. هل تم استخدام نفس التكنولوجيات أم هي تتغير من موقع لآخر. و هل هناك تخطيط لإنشاء تطبيقات الهاتف الموافقة لمواقع شركة حسوب؟
    3 نقاط
  2. السلام عليكم في عمودالDiabetesPedigreeFunction انا عاوز الرقم يكون بس 0 و 1 اعمل كده ازي باستخدم لغه باثيون ؟ ودي البيانات diabetes_clean.csv
    3 نقاط
  3. السلام عليكم هل يوجد معادله رياضيه لحل مساله Palindrome Number ؟
    3 نقاط
  4. السلان عليكم هو المبرمج هل يفضل ان يتعلم اساسيات الامن الاسبيراني حتي لو انا اصل مش عاوز اشتغل في المجال ده يعني لو هشتغل في مجال تاني زي الويب او الموبيل او تحليل البيانات ؟ واي اي هي Google Cybersecurity Professional Certificate ؟
    2 نقاط
  5. السلام عليكم هو اي الفرق ما بين شخص بيتعلم البرمجه اونلاين فقط يعني مش موجود في جامعه خاصه بالمجال وبين واحد بيتعلم برمجه وجود في كليه خاصه بالمجال ؟ واي المفروض الشخص البيتعلم برمجه من خارح الجامعه يخلي بالو منو ؟ واخير ليه شركات زي جوجل بتعمل دورات عبار الانترنت زي شهادت جوجل لتحليلات البيانات وغيرها ؟
    2 نقاط
  6. س1\هل هناك خريطة معينة يجب اتباعها في مسار تطوير واجهات المتسخدم ام فقط اتعلم من الفيديوهات ؟ س2\سويت اكثر من تصميم بساعدة اليوتيوب لكن لم احاول اسوي تصميم خاص بدون مساعدة اليوتيوب احس نفسي ناسي معظم الخطوات وش السبب
    2 نقاط
  7. السلام عليكم, بعد عدة محاولات قررت ابدأ بتعلم البرمجه من دورة علوم الحاسوب. انهيت تقريبا اول ثلاث اقسام "مدخل إلى علوم الحاسوب", "أساسيات البرمجة", "أنظمة التشغيل ونظام لينكس" لكني قطعت بعدها بفتره طويله ونسيت ماذا تعلمت ووين وصلت. اضطررت لاعادة البدء من جديد. عندي بعض الاساله لتجنب حدوث الامر من جديد : نصائح لاكمال التعلم وعدم الانقطاع لفترات طويلة. انتهيت حاليا من اول قسم باسم "مدخل إلى علوم الحاسوب" واحس ان كامل المعلومات رسخت بالكامل, لكن اريد التأكد من كامل المعلومات. اريد نصائح لمواقع تساعدني على التأكد من المعلومات ولا تقتصر على قسم مدخل الى علوم الحسوب وانما جميع الاقسام المتبقية, بحيث اختبر نفسي بعد الانتهاء من كل درس او قسم معين. ايضا هل من نصائح لدورات اخرى لمساعدة فهمي بشكل اكبر ومتقدم, ممكن تكون باللغه الانجليزيه او العربيه. هل يوجد مواقع لاختبارات وتحديات؟ املك تقريبا كامل الدورات الموجوده, لكن عندي هدف واريد تخصيص مجالي في تعلم كامل المتطلبات اللازمه لمجال الويب واريد ان اصبح مبرمج ومطور full-stack. فهل يوجد مخطط معين امشي عليه لضمان التقدم بطريقه صحيحه ومرتبه او نصائح؟ طبعا بعد الانتهاء من الدورة بالكامل بقدم طلب لاكتساب الشهاده, لكن اريد ايضا اكتساب شهادات اخرى لضمان عملي في هذا المجال واكتساب الخبره المطلوبه. انا اخصص وقت يوميا من ساعتين الى 3 ساعات في الصباح فهل هذا الوقت مناسب للتعلم؟ ايضا هل من الممكن تعلم دروس مشابهه لدورات اكادمية حسوب بنفس الوقت وهل ينصح بذلك؟ كمثال هل ممكن اتعلم من اكادمية حسوب وبعد الانتهاء من الدروس او الوقت المحدد قراءة كتب او مشاهدة محتوى مشابه بمكان اخر؟ كمثال من اليوتيوب او دورات ثانيه. حاليا هذي جميع الاسئلة الي عندي, اعتذر لكثرة الاسئلة وعلى ازعاجكم. شكرا لكم على جهودكم بانتظار ردكم الايجابي
    2 نقاط
  8. السلام عليكم في عمودالDiabetesPedigreefuntion هل محتاج ان يتحول من صيغه الي اخر ؟ diabetes_clean.csv
    2 نقاط
  9. من الطبيعي أن تجد العديد من المواقع تأخذ مزيجا من لغات البرمجة والتقنيات المختلفة في نظمها وهيكليتها وهذا راجع لدراسة الجدوى التي تم إجراؤها، بالنسبة لمواقع شركة حسوب فهي تستخدم تقنيات الويب الحديثة إضافة إلى لغات وأطر عمل ك PHP و لارافل وغيرها بخصوص تطبيقات الهواتف فحاليا مواقع حسوب تستخدم تصميما متجاوبا يعمل بشكل جيد على الهواتف المحمولة في المتصفحات وبالنسبة في حالة ما أردت معرفة الخطط المستقبلية للشركة بخصوص تطبيقات الهاتف، يمكنك إما متابعة مدونة حسوب أو متابعة حساباتهم على وسائل التواصل الاجتماعي والاشتراك في نشرتهم البريدية وسيصلك أي جديد بخصوص التحديثات التي يتم إجراؤها بهذا الصدد وإن أردت الحصول على معلومات دقيقة حول هذه النقاط، أنصحك بالتواصل مباشرة مع فريق دعم حسوب. في حال أردت معرفة لغات أو تقنيات أي موقع تزوره يمكنك تحميل إضافة أعتبرها ممتازة جدا في هذا السياق يمكنك الوصول إليها من هنا: Wappalyzer - Technology profiler .
    1 نقطة
  10. شكرااا جدا جدا لحضرتكم بس سوال الشهادات دي والا شهادات الGoogle IT Support Professional Certificate يعني اي الفرق
    1 نقطة
  11. ايوه , بس ليه الارقام دي كده هي كده بتعبر عن اي ده عمود الDiabetesPedigreeFunction (وظيفة شجرة العائلة للسكري): مؤشر يستخدم لقياس وجود تاريخ عائلي للسكري فا ليه الرقم بين 0 , 1.5 مش المفروض تكون 0 و 1 يعني 1 اه في سكري و 0 يعني الا مفيش سكري ؟
    1 نقطة
  12. نعم تتغير من موقع إلى أخر . حيث إختيار ال technology التي تم إنشاء الموقع تعتمد على حجم الموقع و عدد الزيارات المتوقعه وأيضا سهولة التطوير والتحديث والصيانة . حيث قبل إنشاء أى موقع يجب أولا تحديد تلك المتطلبات لتستطيع إختيار ال technology التي ستعمل بها . ولكن كلامنا هنا على المشاريع الكبيرة بحجم حسوب مثلا فهنا يتم إختيار التقينة الأنسب للإحتياج الخاص بالمشروع . وبخصوص التقينة التي تم إنشاء المواقع بها يمكنك تحميل إضافة Wappalyzer على المتصفح والتي ستوضح لك جميع التقنيات التي تم عمل الموقع بها . أما بخصوص تطبيق الهاتف فحاليا لا توجد تطبيقات لشركة حسوب وهذا يرجع إلى الإدارة فأغلب الزيارات تتم من خلال الحاسوب و أعتقد أنه لا توجد حاجة لإنشاء تطبيق هاتف.
    1 نقطة
  13. ليس هناك Stack (التقنيات) واحد يمكن إعتماده لجميع المواقع، دائمًا الأمر يعتمد على حجم المشروع ونوع البيانات والأولويات والوقت المتاح للتطوير والميزانية أيضًا، حيث هناك دائمًا أفضلية لتقنية في أمرًا ما ولكن لها عيوب أيضًا لذا أنت تفاضل بين هذا وذاك وتوازن. وستجد مثلاً منصة مستقل وأكاديمية حسوب يعتمدان على لغة PHP وإطار لارافل، بينما في منصة IO ستجد لغة Ruby وإطار rails. بخصوص تطبيقات الهاتف، فذلك أمر راجع للإدارة ومدى رؤيتها لإحتياج مستخدمي منصاتها لتطبيق الهاتف، إن كنت بحاجة إليه تستطيع طرح طلبك هنا وما السبب لذلك.
    1 نقطة
  14. أنصحك بالاطلاع على إجابة سابقة مماثلة لتساؤلاتك من هنا: لا شكّ أن تحقيق النجاح في تعلم البرمجة لن يكون من دون عثراتوتحديات في البداية لذا فالانقطاع عن التعلم لفترة ليس مشكلة بل استمرار تلك الفترة لما لا نهاية أو ما يزيد عن أسبوعين إلى شهر من الانقطاع سيتسبب في النسيان والتشتت لذا تجنب الانقطاعات التي تزيد عن الأسبوعين أو الشهر في أقصى الحالات والظروف يمكنك وضع جدول مرن يخصص ساعتين إلى ثلاث ساعات يوميا وفق برنامجك اليومي وركز على تجزئة الأهداف إلى خطوات صغيرة قابلة للتحقيق وبعد كل درس، طبّق المعارف المكتسبة في مشاريع صغير، وقم بمراجعة أسبوعية لما تعلمته فإذا كنت تهدف إلى أن تصبح مطور Full-Stack، اتبع مخططا يبدأ من علوم الحاسوب الأساسية، ثم تعلم تقنيات Front-End مثل HTML وCSS وJavaScript، ثم Back-End مثل Node.js أو Python، مع دراسة قواعد البيانات يمكنك متابعة مساقات أكاديمية حسوب إلى جانب مصادر أخرى كالكتب لتعزيز فهمك لها.
    1 نقطة
  15. وعليكم السلام، نعم في بعض الحالات قد تحتاج لتحويل عمود DiabetesPedigreeFunction لصيغة أخرى، وذلك يعتمد على ما إذا كنت تريد استخدام هذه البيانات للتعلم الآلي (Machine Learning) فستحتاج إلى تحويل القيم إلى قيم معمارية: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['DiabetesPedigreeFunction'] = scaler.fit_transform(df[['DiabetesPedigreeFunction']]) أو تطبيع البيانات (Normalization) لتكون بين 0 و 1: from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['DiabetesPedigreeFunction'] = scaler.fit_transform(df[['DiabetesPedigreeFunction']]) أو تقسيم القيم إلى فئات (Binning) كأن تقسمها إلى 3 فئات مختلفة كالتالي: df['DiabetesPedigreeFunction'] = pd.qcut(df['DiabetesPedigreeFunction'], q=3, labels=['منخفض', 'متوسط', 'مرتفع']) أو من أجل معالجة القيم الشاذة كالتالي: Q1 = df['DiabetesPedigreeFunction'].quantile(0.25) Q3 = df['DiabetesPedigreeFunction'].quantile(0.75) IQR = Q3 - Q1 df['DiabetesPedigreeFunction'] = df['DiabetesPedigreeFunction'].clip(lower=Q1-1.5*IQR, upper=Q3+1.5*IQR)
    1 نقطة
  16. هناك خاصية رياضية قام باكتشافها الرياضيون وتتعلق بالأعداد المتناظرة تسمى "طريقة العكس والجمع" (Reverse and Add Method) أو "196-Algorithm" ويطلق عليها أيضا المشكلة 196 فالخاصية تقول: "خذ أي عدد صحيح موجب، اعكسه وأضفه إلى العدد الأصلي ثم كرر هذه العملية حتى تحصل على عدد متناظر" ويمكنك ملاحظة أن الخاصية هي أقرب ما تكون من الخوارزمية من المعادلة الرياضية ولنعمل مثال: نبدأ بالعدد 47 وحينما نعكسه نحصل على 74 ثم نجمع: 47 + 74 = 121 نحصل على 121 عددا متناظرا. لكن هناك بعض الأعداد التي عندما تطبق عليها هذه العملية لا تصل أبدا إلى عدد متناظر وأشهر هذه الأعداد هو 196. 196 + 691 = 887 887 + 788 = 1675 1675 + 5761 = 7436 وهكذا... لهذا فهذه المشكلة معروفة باسم معضلة 196 (196-Problem) وهي مشكلة رياضية مفتوحة حتى الآن ولم يتمكن العلماء من إثبات ما إذا كانت هذه العملية ستؤدي في النهاية إلى عدد متناظر أم لا. أما بالنسبة للأعداد المتناظرة نفسها، فهناك صيغة لتوليد الأعداد المتناظرة للأعداد المتناظرة ذات n من الخانات إذا كان n فردي فالأعداد من 10^(n-1) إلى (10^n - 1) وإذا كان n زوجي فيمكن توليدها باستخدام النصف الأول وعكسه لكن هذه ليست معادلة بالمعنى التقليدي، بل هي طريقة لتوليد الأعداد المتناظرة وهناك أيضا بعض الخصائص الرياضية المثبتة للأعداد المتناظرة فأي عدد متناظر من رقمين يقبل القسمة على 11 وعدد الأعداد المتناظرة التي طولها n هو 9 × 10^((n-1)/2) إذا كان n فردي وعدد الأعداد المتناظرة التي طولها n هو 9 × 10^(n/2 - 1) إذا كان n زوجي.
    1 نقطة
  17. يمكنك استخدام مكتبة numpy للحصول على النتيجة المطلوبة من خلال استخدام np.where كالتالي: import numpy as np import pandas as pd df = pd.read_csv('diabetes.csv') df['DiabetesPedigreeFunction'] = np.where(df['DiabetesPedigreeFunction'] > 0.5, 1, 0) فببساطة إذا كانت القيمة أكبر من 0.5 سيجعلها 1 وإذا كانت أقل من أو تساوي 0.5 سيجعلها 0
    1 نقطة
  18. من خلال مكتبة pandas كالتالي: import pandas as pd df = pd.read_csv('diabetes.csv') df['DiabetesPedigreeFunction_Binary'] = (df['DiabetesPedigreeFunction'] > 0.5).astype(int) print(df) ستنشيء عمود جديد يُسمى 'DiabetesPedigreeFunction_Binary' ونحدد له قيمة 1 في حال كانت قيمة 'DiabetesPedigreeFunction' أكبر من 0.5، و 0 خلاف ذلك.
    1 نقطة
  19. وعليكم السلام ورحمة الله وبركاته. إذا كنت تستخدم مكتبة pandas فالأمر بسيط بعد قراءة الملف يمكنك تعديل البيانات في الكود كالتالي : df['DiabetesPedigreeFunction'] = df['DiabetesPedigreeFunction'].apply(lambda x: 1 if x > 0 else 0) print(df['DiabetesPedigreeFunction']) ولكن يرجى تحديد الشرط بناء على الرقم الذي تريده . لقد لاحظت أن الأرقام بين 0 و 1.5 لذلك يمكنك تحديد الشرط بناء على رغبتك وتغيره في الكود السابق.
    1 نقطة
  20. ايوه فعلان انا عملت كده def is_palindrome(x): if x < 0: return False original_num = x reversed_num = 0 while x > 0: last_digit = x % 10 reversed_num = reversed_num * 10 + last_digit x = x // 10 return original_num == reversed_num print(is_palindrome(121)) print(is_palindrome(-121)) فا شكرااا جدا لحضرتكم انا فكرة ان يكون فيه معادله رياضيه
    1 نقطة
  21. لا يوجد معادلة رياضية محددة لذلك، وللتوضيح Palindrome Number هو رقم يقرأ بنفس الطريقة من اليمين إلى اليسار ومن اليسار إلى اليمين مثل 121، 353، 9009. أي من خلال النظر فقط. ويتم التحقق من Palindrome Number برمجيًا عن طريق مقارنة الرقم الأصلي بمرآته (عكس الرقم) وفي حال الرقمان متساويين، فإن الرقم الأصلي هو Palindrome Number. ولو أردت كتابة معادلة رياضية فسنكتب التالي: s = str(n) rev_s = reverse(s) is_palindrome = s == rev_s If is_palindrome is True, then n is a palindrome number. وهي أقرب لخوارزمية من معادلة رياضية.
    1 نقطة
  22. وعليكم السلام ورحمة الله وبركاته. لا توجد معادلة رياضية معروفة حاليا لمعرفة الرقم هل هو Palindrome Number أم لا . ولكن توجد العديد من الخوارزميات لحل تلك المشكلة . و أسهل تلك الحلول هو تحويل الرقم إلى سلسلة نصية وعكس تلك السلسلة ومقارنتها بالسلسلة الأصلية وإذا كانوا متشابهين إذا الرقم Palindrome . أما إذا أردت حلها رياضيا فسيتوجب عليك عكس الرقم . وأسهل طريقة هي أن نقسم الرقم على 10 وأخذ باقي القسمة وهكذا إلى أن نقوم بعكس الرقم تمام ومقارنته بالرقم الأصلي . فمثلا : 121 % 10 # باقي القسمة 1 12 % 10 # باقي القسمة 2 1 % 10 # باقي القسمة 1 وهكذا نقوم بالقسمة وأخذ ناتج القسمة وفي كل مرة نقوم بإضافة ناتج قسمة جديد نقوم بضرب الناتج السابق في 10 وجمعه ما باقي القسمة الجديد : 1 # 1 (1 * 10) + 2 # 12 (12 * 10) + 1 # 121 وهكذا قمنا بعكس الرقم حسابيا ويمكنك مقارنته بالرقم الأساسي ومعرفة هل الرقم Palindrome أم لا.
    1 نقطة
  23. بالنسبة لإكمال الدورة و عدم الانقطاع فأنصحك أن تحب الشيء الذي تتعلمه لكي تستمر فيه و تبدع فيه , أما إذا لم تكن تحب البرمجة و تتعلمها فقط للحصول على فرصة عمل فسيكون الأمر صعب بعض الشيء و هنا الأمر يعتمد عليك و على الإرادة التي تمتلكها. لذلك أنصحك بتحديد هدف من تعلمك للبرمجة فالهدف هو الذي يجعلك تستمر. أما بالنسبة للتعلم و الخبرة فلن تستطيع تعلم كل شيء دفعة واحدة , و إنما ستتدرج بالتعلم حتى تصبح خبيرا , لذلك أنصحك في هذه المرحلة التي أنت فيها بالمتابعة مع الدورة التي اخترتها و ستأخذ فيها كل ماتحتاجه بالنسبة للموضوع الذي تتحدث عنه الدورة, و مستقبلا عندما تتقدم و تكون قد فهمت الحاسوب و البرمجة و تعمقت فيها يمكنك التوسع أكثر . بالنسبة لوقت التعلم فهذا يعتمد عليك إذا كنت ترى أنك تستطيع بساعتين أو ثلاثة التعلم فهذا مناسب أما إذا كنت تريد التعلم بسرعة أكبر فعليك أن تزيد عدد الساعات. لكي تكسب الفهم العميق و الخبرة عليك أن تطبق كل ماتتعلمه و تفهم كل أمر في البرمجة لكي تستخدمه بالطريقة الصحيحة. حاليا أنت مازلت في البداية لذا لا تشتت نفسك فقط تابع مع المدرب و إذا واجهت أي مشكلة أو أمر لم تفهمه يمكنك السؤال أسفل الدرس و ستجد مجموعة من المدربين يجيبوك على استفسارك.
    1 نقطة
  24. أتفهم شعورك بالتشتت في الوقت الحالي، لكن ستحتاج إلى الإنتهاء من مرحلة ثم التي تليها، فحاليًا أنت تتعلم أساسيات البرمجة من خلال دورة علوم الحاسوب، أرجو قراءة التالي: ثم التالي: وبالنسبة لمطور Full-stack فهل تريد تعلم جافاسكريبت أم PHP أم بايثون؟ عامًة عليك تحديد ذلك من خلال تفقد المطلوب في سوق العمل لديك بالنسبة لمستوى Junior، وليس ما تفضله أنت. وتستطيع التعلم من مصادر أخرى، وذلك أفضل بالطبع فلا توجد دورة واحدة تقدم لك كل شيء، وأحيانًا تحتاج إلى المزيد من الشرح أو التوضيح أو رؤية شرح آخر وهكذا، أيضًا للتطبيق العملي أنت بحاجة إلى للبحث على اليوتيوب عن مشاريع للمبتدئين وتنفيذها ورؤية الشرح. لكن لا تشتت نفسك، عليك الإلتزام بدورة واحدة مناسبة لك، ثم الاستزادة من مصادر أخرى وتنفيذ مشاريع والممارسة.
    1 نقطة
  25. لا يوجد حاجة لتحويله، فالبيانات في العمود موجودة بالفعل في صيغة رقمية، بالتالي مناسبة للاستخدام في التحليلات الإحصائية أو نماذج التعلم الآلي. إلا في حال أنك تريد تقسيم البيانات إلى فئات مختلفة حسب قيم DiabetesPedigreeFunction، فستحتاج إلى تحويلها إلى صيغة نصية أو رقمية تمثل تلك الفئات. أو تريد استخدام البيانات به كمتغير ثنائي (0 أو 1)، فستحتاج إلى تحويلها إلى صيغة ثنائية.
    1 نقطة
  26. نعم نستخدم تلك الدالة ولحفظ الملف الجديد بعد حذف الصفوف المكررة، يمكنك استخدام إحدى الطرق التالية فإذا أردت حفظه بصيغة بصيغة CSV أولا نحذف القيم المكررة ثم نحفظ الملف الجديد كالتالي: diabetes.drop_duplicates(inplace=True) diabetes.to_csv('diabetes_clean.csv', index=False) ولحفظ الملف بصيغة Excel: diabetes.drop_duplicates(inplace=True) diabetes.to_excel('diabetes_clean.xlsx', index=False)
    1 نقطة
  27. أنت لا تشعر بالضياع أو التشتت عزيزي، حتى من لديه خبرة كبيرة بالبرمجة إذا انقطع لفترة طويلة سينسى بالتأكيد، فالبرمجة تحتاج إلى ممارسة، فما بالك بمن درس لفترة صغيرة وانقطع بالتأكيد سيشعر بالضياع. وإذا كنت قد درست بشكل صحيح وبتأني وقمت بالتطبيق مرة مع المدرب ومرة بمفردك وحاولت التغيير قليلاً في المشروع لتتعلم أشياء جديدة من المشاكل التي ستواجهك، أو تستطيع مشاهدة بعض الفيديوهات ثم توقفت وقم بالتطبيق بمفردك وحاول الإضافة أو التغيير قليلاً لتتعلم. فلا مشكلة كل ما تحتاجه حاليًا هو مراجعة الدورة بشكل سريع أي تشغيل الفيديو على سرعة 1.5 أو 2 حسب ما يناسبك فإذا وجدت نفسك تسترجع المعلومات وتتذكر فعليك بالتطبيق على مشروع إذًا لتثبيت ما قمت بمراجعته. ولكن إذا وجدت نفسك لا تتذكر كم كبير من المعلومات أو تجد صعوبة في تنفيذ المشروع من البداية ولا تعرف ماذا تفعل بالكود، هنا يجب دراسة الدورة من البداية وبتأني وعدم الإنتقال من قسم إلى قسم إلا بعد التأكد أنك فهمت وطبقت بمفردك. ونصيحة، حاول ألا تشعر بالقلق عند تعلم البرمجة فالجميع بدأ من نفس النقطة، فأعطي نفسك بعض الوقت وإلتزم بمسار تعليمي وخلال فترة سيتحسن مستواك بشكل كبير. وأيضًا إذا واجهتك مشكلة قم بتقسيمها إلى أجزاء صغيرة وحاول تنفيذها ولا تنظر للمشكلة بشكل كامل، في البداية حاول التطبيق على أجزاء صغيرة ثم قم ببناء موقع كامل وستجد في الروابط التي أرفقتها لك موقع لتحديثات وتصاميم للتطبيق على ما تعلمته. وقد تم النقاش حول الطريقة الصحيحة لدراسة الدورات هنا بشكل مفصل: ولتجنب التكرار، أنصحك بقراءة النقاشات التالية فستجد بها إجابة على الكثير من الأسئلة لديك:
    1 نقطة
  28. إذا كنت متفرغ فأنصحك بتخصيص 6 إلى 10 ساعات يوميًا للمذاكرة، أما إذا كنت غير متفرغ فيمكنك تخصيص 3 ساعات يوميًا للمذاكرة أو ساعتان حيث أن أقل من ذلك لا يعتبر وقت كافي. وكلما زدت في الوقت والإجتهاد كان أفضل لك، ولكن ذلك لا يعني أن تخصص 10 ساعات لمشاهدة الفيديوهات بل خليط ما بين المشاهدة ثم الكتابة وراء المدرب أو بمفردك ومحاولة التغيير في الكود الذي كتبه المدرب وخلق تحدي بسيط لك وأيضًا البحث عن حل للمشاكل التي تواجهك من خلال القراءة أو مشاهدة فيديو على اليوتيوب مثلاً ولكن حاول البحث والقراءة أولاً. فلا تعود نفسك على رؤية الحل مباشرًة فعند البحث ستجد معلومات كثيرة أنت بحاجة إليها في البداية، وأيضًا ستكتشف المصادر الخاصة بالمعلومات والأدوات. أي أن الوقت اللازم يتوقف عليك أنت، فالبعض قد ينهي الدورة بشكل سريع لكن هل حقق الاستفادة المرجوة فعلاً؟ وهناك نصيحة، في البداية عليك أن تسير ببطيء من أجل الإسراع لاحقًا لا العكس، حيث أن الأساسيات هي ما ستوفر لك التعلم بشكل أسرع مستقبلاً وتجنب التخبط والتشتت. كل شخص له طريقة مفضلة في المذاكرة واسترجاع المعلومات، مثلاً إذا كان الكتابة بالورقة والقلم مريح لك ويفيدك فقم بتسجيل المعلومات الهامة التي تريد استرجاعها فيما بعد. والبعض يفضل مشاهدة 4 فيديوهات مثلاً ثم التطبيق بمفرده بدون الكتابة وراء المدرب، ومحاولة البحث، ثم الرجوع للفيديو لتذكر أمرًا ما أو رؤية كيفية تنفيذ كود معين. ودائمًا وأبدًا أفضل طريقة هي من خلال كتابة الكود، فمهما قمت بالمشاهدة حتى لو ألف ساعة، ذلك لا يغني عن كتابة الكود بيديك وتمرين عقلك على حل المشكلات البرمجية والتفكير قبل كتابة الكود. إذا كان الفيديو بحجم صغير فقم بمشاهدة فيديو حتى 4 فيديوهات تبعًا لما يناسبك، ثم قم بالتطبيق بمفردك لمحاكاة ما قام به المدرب، ثم حاول إضافة ميزة أو خاصية جديدة أو القيام بشيء معقد قليلاً أي اخلق تحدي بسيط يجعلك تبحث أو تفكر قليلاً إذا أردت. ولا مشكلة في الرجوع للفيديو لتذكر أمرًا ما، لكن ذلك ملاذك الأخير بعد التفكير والبحث. عند الرجوع للدورة بعد فترة إنقطاع، أفضل طريقة للاسترجاع هي بإعادة القيام بتنفيذ مشروع قمت بتنفيذه من قبل في الدورة. حيث أن ذلك سيحفزك إلى مذاكرة الأمور التي نسيتها من خلال إعادة المشاهدة أو البحث. وتستطيع أيضًا إعادة المشاهدة ولكن بسرعة 2X ثم إعادة التطبيق على مشروع لتثبيت ما تم استرجاعه.
    1 نقطة
  29. هل تتساءل عن كيفية الحصول على طول وعرض نافذة المتصفح؟ وكيف لك أن تعرف الطول والعرض الكلي للصفحة بما فيه الجزء الذي لا يُؤشِر عليه شريط التمرير (الجزء من الصفحة غير الظاهر في النافذة)؟ وكيف يمكن تمرير محتوى الصفحة باستعمال لغة جافاسكربت؟ فيما يلي الأجوبة الشافية لكل هذه التساؤلات. يمكن، في أغلب هذه الحالات، استعمال العنصر الجذر للصفحة document.documentElement الذي يقابِل الوسم <html>، بالإضافة إلى بعض الدوالّ والخاصيات التي يُستحسن أخذها في الحسبان نظرًا لأهميتها. طول وعرض النافذة تُستخدم الخاصيتان clientHeight وclientWidth لمعرفة طول وعرض النافذة. حيث تُظهِرالتعليمة، في المثال التالي، طول نافذة المتصفح: alert( document.documentElement.clientHeight ); ملاحظة: لا تستعمل window.innerWidth وwindow.innerHeight تدعم المتصفحات الخاصيتين window.innerWidth وwindow.innerHeight، ويبدو أنهما تتوافقان مع ما نريده، فلماذا لا نستخدمهما بدلًا من الخاصيتين اللّتان ذكرناهما سابقا؟ في حالة وجود شريط تمرير في الصفحة، تعطي الخاصيتان clientHeight وclientWidth طول وعرض النافذة بعد طرح عرض شريط التمرير منه. أو بعبارة أخرى، تعطيان طول وعرض الجزء الظاهر من الصفحة والمخصص للمحتوى. وتعطي الخاصيتان window.innerWidth وwindow.innerHeight الطول والعرض الكليين للنافذة بما فيهما عرض شريط التمرير. في حالة ما إذا كان لدينا شريط تمرير يشغل مساحة ما من النافذة، تعطي التعليمتان التاليتان نتائج مختلفة: alert( window.innerWidth ); // العرض الكلي للنافذة alert( document.documentElement.clientWidth ); // عرض النافذة بعد طرح عرض شريط التمرير منه See the Pen JS-p2-10-Window sizes and scrolling-ex1 by Hsoub (@Hsoub) on CodePen. نحتاج، في أغلب الحالات، معرفة عرض النافذة المتاح (المخصص للمحتوى)، لرسم شيء ما أو وضعه، أي دون احتساب عرض شريط التمرير إن وُجد، لذا علينا استعمال الخاصيتين documentElement.clientHeight وdocumentElement.clientWidth. ملاحظة: التعليمة DOCTYPE مهمة لاحظ أن الخاصيات رفيعة المستوى المتعلقة بالهندسة يمكن أن لا تعمل بالشكل المطلوب إذا لم يحوي ملف HTML التعليمة <!DOCTYPE HTML> ، فمن الممكن أن تحدث أشياء غريبة بسبب ذلك. أضف دائمًا إذًا التعليمة DOCTYPE عند كتابة شيفرة HTML على الطريقة العصرية. طول وعرض الصفحة نظريا، وبما أن العنصر الجذر للصفحة هو document.documentElement، ويضُم كلّ المحتوى، يمكن قياس العرض والطول الكليين للصفحة باستعمال الخاصيتين document.documentElement.scrollWidth وdocument.documentElement.scrollHeight، ولكن هاتين الخاصيتين، عند استعمالهما على هذا العنصر، لا تعملان بالشكل المطلوب إن لم يكن هناك شريط تمرير في كلّ من المتصفحات Chrome/Safari/Opera، حيث يمكن أن تعطي الخاصية documentElement.scrollHeight قيمةً أصغر من القيمة التي تعطيها الخاصية documentElement.clientHeight. يبدو الأمر غريبا نوعا ما، أليس كذلك؟ للحصول إذًا على القيمة الصحيحة للطول الكلي للصفحة، علينا أخذ أكبر قيمة من بين القيم التالية: let scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight ); alert('Full document height, with scrolled out part: ' + scrollHeight); See the Pen JS-p2-10-Window sizes and scrolling-ex2 by Hsoub (@Hsoub) on CodePen. لماذا يحدث ذلك؟ يُستحسن عدم طرح هذا السؤال لأن هذه التناقضات موجودة منذ زمن ولا تخضع لتفكير منطقي "ذكي". حساب إحداثيات الموضع الحالي لعنصر ما تملك عناصر تمثيل الصفحة ككائن DOM خاصيتين تحملان إحداثيات موضعها من الصفحة وهما: elem.scrollLeft وelem.scrollTop. فبالنسبة لموضِع النافذة، تعمل الخاصيتان document.documentElement.scrollLeft وdocument.documentElement.scrollTop في أغلب المتصفحات، عدا تلك التي تعتمد على محرك WebKit مثل المتصفح Safari (يوّلد استعمالها الخطأ البرمجي 5991)، حيث ينبغي في هذه الحالة استعمال document.body بدلا من document.documentElement. ومن حسن الحظ أنه ليس علينا على الإطلاق تذكُّر كلّ هذه الخاصيات، حيث توجد خاصيتان غيرهما تعطيان الموضع الحالي للنافدة، إنهما الخاصيتان window.pageXOffset وwindow.pageYOffset، وهما خاصيتان قابلتان فقط للقراءة. alert('Current scroll from the top: ' + window.pageYOffset); alert('Current scroll from the left: ' + window.pageXOffset); See the Pen JS-p2-10-Window sizes and scrolling-ex3 by Hsoub (@Hsoub) on CodePen. التمرير باستعمال الدوال scrollTo وscrollBy وscrollIntoView ملاحظة هامة لا يمكن تمرير الصفحة إلّا بعد البناء الكلي لنموذج تمثيل الصفحة ككائن (DOM)، فمن غير الممكن كتابة شيفرة لتمرير الصفحة ووضعها في الجزء <head> أي تنفيذها قبل أن تجهز الصفحة فلن يعمل ذلك حتما. ويمكن تمرير العناصر العادية بتغيير قيم الخاصيتين scrollTop وscrollLeft، كما يمكن عمل الشيء نفسه للصفحة باستعمال الخاصيتين document.documentElement.scrollLeft وdocument.documentElement.scrollTop، عدا في المتصفح Safari (حيث ينبغي استخدام الخاصيتين document.body.scrollLeft وdocument.body.scrollTop بدلا منها). وهناك أيضا طريقةٌ بديلةٌ، أبسط من الأولى، تعمل في كافة المتصفحات، وتكون باستعمال الدالّتين window.scrollBy(x,y)‎ وwindow.scrollTo(pageX,pageY)‎. تحرّك الدالّة scrollBy(x,y)‎ النافذة من مكانها الحالي بمقدار معين. حيث تُحرِك التعليمة window.scrollBy(0,10)‎ مثلا الصفحة إلى الأسفل بمقدار عشرة بكسل. وتحرِّك الدالّة scrollTo(pageX,pageY)‎ الصفحة إلى موضعٍ ذي إحداثياتٍ مطلقةٍ. بحيث تكون إحداثيات الركن العلوي الأيسر للجزء الظاهر من الصفحة هي (pageX, pageY) إنطلاقا من الركن العلوي الأيسر للصفحة. تعمل هذه الدالّة تماما كما لو أننا نُسنِد قِيَمًا للخاصيتين scrollLeft وscrollTop. مثلًا لتحريك النافذة إلى نقطة البداية (العودة إلى أعلى الصفحة)، يمكن استعمال التعليمة window.scrollTo(0,0)‎. وتعمل هذه الدوالّ بنفس الطريقة (تعطي النتائج نفسها) على كلّ المتصفحات. الدالة scrollIntoView دعنا نكمل ما بدأناه بشرح الدالّة elem.scrollIntoView(top)‎. ينتج عن مناداة هذه الدالّة تمرير الصفحة بحيث تجعل العنصر elem ظاهرًا، ولها وسيط واحد: إذا كانت قيمة الوسيط top تساوي true (وهي القيمة المبدئية -الافتراضية)، تُمرَّر الصفحة بحيث يظهر العنصر elem أعلى النافذة فتتطابق حافته العلوية مع أعلى النافذة. وإذا كانت قيمة الوسيط top تساوي false، تُمرَّر الصفحة بحيث يظهر العنصر elem أسفل النافذة فتتطابق حافته السفلى مع أسفل النافذة. مثال: إذا كان لدينا زر، فإن هذه التعليمة this.scrollIntoView()‎ تُحرِك الصفحة بحيث يظهر هذا الزر أعلى النافذة. أما هذه التعليمة this.scrollIntoView(false)‎، فتُحرِك الصفحة بحيث يظهر الزر أسفل النافذة. تثبيط قابلية التمرير نحتاج أحيانا إلى جعل الصفحة غير قابلة للتمرير، فنرغب مثلًا في إخفائها وراء رسالة طويلة للفت انتباه الزائر وحمله على التفاعل مع الرسالة وليس مع الصفحة. وهنا يكفي إسناد القيمة "hidden" للخاصية document.body.style.overflow حيث تثبِّت (تجمِّد) هذه التعليمة الصفحة في موضعها الحالي. فلتجرب ذلك باستعمال التعليمتين document.body.style.overflow="hidden" و document.body.style.overflow="". هنا، تثبِّط التعليمة الأولى قابلية التحريك، أما التعليمة الثانية فتعاود تفعيلها. ويمكننا استعمال هذه الطريقة لتجميد/تثبيت عناصر أخرى أيضا، ليس العنصر document.body فقط. غير أن لهذه الدالّة نقطة سلبية، حيث يختفي شريط التمرير تماما بعد مناداتها، وبما أنه كان يشغل مساحة ما من الصفحة، فعند اختفائه، يتحرك محتوى الصفحة بعض الشيء لملء الفراغ الذي نتج عن اختفاء شريط التمرير. يبدو هذا غريبا بعض الشئ، ولكن يمكننا تفادي حدوث ذلك بموازنة قيمة الخاصية clientWidth قبل وبعد التثبيط، فإذا ازداد العرض بعد اختفاء شريط التمرير، نضيف حاشية padding للعنصرdocument.body مكان شريط التمرير للإبقاء على عرض محتوى الصفحة كما هو. الخلاصة لمعرفة طول/عرض الجزء الظاهر من الصفحة (طول/عرض مساحة المحتوى) نستعمل الخاصيتين document.documentElement.clientWidth/Height. *لمعرفة الطول/العرض الكلي للصفحة بما فيها الجزء غير الظاهر في النافذة نبحث عن أكبر قيمة من بين القيم التالية: let scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight ); لقراءة إحداثيات موضع الجزء الظاهر من الصفحة إنطلاقا من الركن العلوي الأيسر للصفحة نستعمل الخاصيتين window.pageYOffset/pageXOffset. ولتغيير الموضع الحالي للنافذة نستعمل الدوالّ التالية: window.scrollTo(pageX,pageY): التحريك نحو الموضع ذي الإحداثيات المطلقة (pageX,pageY). window.scrollBy(x,y) : التحريك بمقدار (x,y) انطلاقا من الموضع الحالي. elem.scrollIntoView(top): التحريك لجعل العنصر elem ظاهرًا، أي تحريكه بحيث يتطابق مع أعلى أو أسفل النافذة حسب قيمة الوسيط top. ترجمة -وبتصرف- للفصل Window sizes and scrolling من كتاب Browser: Document, Events, Interfaces
    1 نقطة
×
×
  • أضف...