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

Mustafa Suleiman

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

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

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

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

    305

أجوبة بواسطة Mustafa Suleiman

  1. مفهوم B2B إلى "Business to Business" أو "من الأعمال إلى الأعمال"، هو نموذج تجاري يبيع فيه المنتج أو الخدمة إلى شركة أخرى بدلاً من المستهلك النهائي.

    ويتميز نموذج B2B بالعديد من الاختلافات عن نموذج B2C (من الأعمال إلى المستهلك)، بما في ذلك:

    • تكون صفقات B2B عادةً أكبر من صفقات B2C.
    •  دورة المبيعات في B2B عادةً أطول من دورة المبيعات في B2C.
    • القرارات الشرائية في B2B عادةً أكثر تعقيدًا من القرارات الشرائية في B2C.

    ويتوفر العديد من الأمثلة على نموذج B2B في عالم ريادة الأعمال:

    • تبيع شركات البرمجيات منتجاتها وخدماتها إلى الشركات الأخرى.
    • تبيع شركات المعدات معدات الإنتاج والتصنيع إلى الشركات الأخرى.
    •  تقدم شركات الخدمات خدماتها إلى الشركات الأخرى، مثل خدمات التسويق أو المحاسبة أو اللوجستيات.

     

  2. يوجد العديد من العوامل التي يجب مراعاتها عند اتخاذ هذا القرار، بما في ذلك:

    • من المهم أن تختار مستشارًا لديه خبرة في مجال عملك. سيساعد هذا المستشار على فهم التحديات والفرص التي تواجهها بشكل أفضل.
    •  أيضًا اختيار مستشار لديه سجل حافل من النجاح في الماضي من أجل التأكد من أنك تحصل على المشورة من شخص يعرف ما يفعله.
    •  أن تشعر بالراحة مع مستشارك لبناء علاقة قوية معه والاستفادة من خبرته وتوجيهه.

    ولكن قبل ذلك:

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

    وهناك طريقتان لتسجيل العلامة التجارية:

    • التسجيل في مكتب العلامات التجارية في بلدك.
    • التسجيل في المنظمة العالمية للملكية الفكرية (WIPO).

    ويُعد التسجيل في مكتب العلامات التجارية في بلدك هو الخيار الأكثر شيوعًا، حيث يمنح الحماية القانونية في بلدك فقط، أما التسجيل في المنظمة العالمية للملكية الفكرية (WIPO) فيمنح الحماية القانونية في أكثر من 100 دولة.

    والخطوات اللازمة لتسجيل العلامة التجارية لاسم الموقع الإلكتروني هي:

    1. اختر اسمًا مميزًا وفريدًا لاسم موقعك الإلكتروني.
    2. تحقق من توفر اسم الموقع الإلكتروني.
    3. قدم طلب تسجيل العلامة التجارية إلى مكتب العلامات التجارية في بلدك أو المنظمة العالمية للملكية الفكرية (WIPO).
    4. دفع الرسوم المطلوبة.
    5. انتظر الموافقة على تسجيل العلامة التجارية.

    وبعد تسجيل العلامة التجارية لاسم الموقع الإلكتروني، يمكنك اتخاذ الإجراءات القانونية اللازمة لحماية حقوقك إذا تم استخدام اسم الموقع الإلكتروني بطريقة غير مشروعة.

    وبالإضافة إلى تسجيل العلامة التجارية، اتخذ بعض الإجراءات الإضافية لحماية حقوق الملكية الفكرية لاسم موقعك الإلكتروني، مثل:

    • استخدام اسم الموقع الإلكتروني في جميع مواد التسويق.
    • تسجيل اسم الموقع الإلكتروني في محركات البحث.
    • استخدام اسم الموقع الإلكتروني في صفحات التواصل الاجتماعي الخاصة بك.
    • أعجبني 1
  4. هي  مكتبة برمجية مفتوحة المصدر تُستخدم لتوليد بيانات وهمية في مشاريع بايثون، وتستخدم تلك البيانات لأغراض الاختبار، أو لإنشاء مجموعات بيانات تدريبية، أو لمجرد الترفيه.

    وتدعم مكتبة Faker مجموعة واسعة من أنواع البيانات، بما في ذلك:

    • الأسماء والألقاب والبيانات الشخصية الأخرى
    • عناوين البريد الإلكتروني وأرقام الهواتف والبيانات المالية
    • النصوص والمحتوى الإبداعي
    • البيانات المتعلقة بالأعمال والشركات
    • البيانات المتعلقة بالتكنولوجيا والويب

    وتعتمد مكتبة Faker على بيانات حقيقية من العالم الحقيقي لإنشاء بيانات وهمية دقيقة، ودعم مجموعة واسعة من أنواع البيانات.

    وللعلم هناك FakerPHP وfakerjs.

    • أعجبني 1
  5. غالبية المشاريع على مواقع العمل الحر هي مشاريع صغيرة ومتوسطة، ولذلك ستجد أنه يتم الإعتماد على PHP ولارافل ووردبريس من أجل تنفيذ تلك المشاريع بسبب سهولة تنفيذها من خلالها وتوافر كافة الأدوات اللازمة.

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

    وهناك أيضًا إطار ASP.NET والذي يستخدم بكثرة في العالم العربي وخارجه أيضًا لكن ليس في المشاريع الصغيرة بل المتوسطة والكبيرة.

    عليك إختيار سوق العمل الذي تريد العمل به، ثم تعلم المهارات المطلوبة به لا العكس.

    ستجد هنا نقاش مفيد:

    الافضل كـ backendمن حيث فرص العمل الفترة القادمة (2024)

    • أعجبني 1
  6. أنتِ تستخدمين مصفوفة NumPy لـ image_path، ومصفوفات NumPy ليس لديها خاصية split().

    لذلك، عليك تحويل image_path إلى سلسلة نصية قبل استخدامها في str.split() كالتالي:

    image_path = str(image_path)
    output_image_path = "object-detection-" + image_path.split('.')[0] + ".jpg"

    من أجل تحويل image_path إلى سلسلة نصية، ثم سيستخدمها str.split() لإنشاء سلسلة جديدة تتكون من اسم الملف بدون الامتداد.

    وسبب ظهور الخطأ الثاني هو أنّك تحاولين استخدام cv2.imwrite() لكتابة مصفوفة NumPy كصورة، في الوقت الذي تتوقع فيه cv2.imwrite() إشارة OpenCV UMat كصورة، عليك إجراء التعديل التالي:

    image = cv2.imread(image_path)
    cv2.imwrite(output_image_path, image)

    حتى يتم قراءة الصورة من image_path إلى إشارة OpenCV UMat ثم سيستخدم cv2.imwrite() تلك الإشارة لكتابة الصورة إلى ملف.

    • أعجبني 1
  7. العفو أخي عمار سعيد بمساعدتك، عليك القيام بالتالي:

    1. إنشاء متغير q لحفظ رقم السؤال الحالي.
    2. في دالة cin()، إضافة الخطوات التالية:
    3. التحقق من أن q أقل من عدد الأسئلة.
    • عرض السؤال الحالي.
    • عرض الخيارات المتاحة.
    • انتظار الإجابة من المستخدم.
    • التحقق من أن الإجابة صحيحة.
    • إذا كانت الإجابة صحيحة، زيادة قيمة q بواحد.
    • إذا كانت الإجابة غير صحيحة، عرض رسالة خطأ.

    وإليك الكود بعد التعديل:

    from tkinter import *
    from tkinter.colorchooser import *
    from tkinter.messagebox import *
    from tkinter.constants import *
    
    #g= tkinter.Tk()
    g=Tk()
    #g.config(background="white")
    n=StringVar()
    q=1
    questions={" 1.which this program? :":"C. py",
    " 2.why you use py? :":"D. both AB",
    " 3.when you will be a programer?:":"D. fastly ",
    #" 4.why you choice py?: ":"A"
    }
    options=[["A. java","B. c++","C. py","D. code"],
    ["A. easy","B. global","C. non","D. both AB"],
    ["A. after year","B.after six month","C. noon","D. fastly "],
    #["A. easy","B. global","C. someone recommend","D. yes "]
    ]
    
    def cin():
        global q
        if q < len(questions):
            ff=Label(g,text=questions[q])
            ff.pack()
            k =(questions.get(questions[q]))
            for i in options[q-1]:
                c = Radiobutton(g, text = i,fg = "black", width = 12, height = 1,variable=n, value=i ,bd = 2, bg = "white", cursor = "hand2" ,command=lambda:cin())
                c.pack()
                s = n.get()
                if s == k :
                    showinfo(title='information',message='hi.. u passed')
                    q += 1
                else:
                    showerror(title='error',message='hi.. u missed something')
        else:
            showinfo(title='information',message='hi.. u finished')
    
    cin()
    g.mainloop()
    • في البداية، يتم إنشاء متغير q لحفظ رقم السؤال الحالي.
    • في دالة cin()، يتم التحقق من أن q أقل من عدد الأسئلة. إذا كان الأمر كذلك، يتم تنفيذ الخطوات التالية:
    1. عرض السؤال الحالي.
    2. عرض الخيارات المتاحة.
    3. انتظار الإجابة من المستخدم.
    4. التحقق من أن الإجابة صحيحة.
    5. إذا كانت الإجابة صحيحة، زيادة قيمة q بواحد.
    6. إذا كانت الإجابة غير صحيحة، عرض رسالة خطأ.
    • إذا كانت q مساوية لعدد الأسئلة، يتم عرض رسالة تفيد بأن المستخدم قد أنهى الاختبار.

    وإليك مثال على كيفية عمل الكود:

    1.which this program? :
    A. java
    B. c++
    C. py
    D. code
    
    Select your answer:
    C
    
    hi.. u passed
    
    2.why you use py? :
    A. easy
    B. global
    C. non
    D. both AB
    
    Select your answer:
    D
    
    hi.. u passed
    
    3.when you will be a programer?:
    A. after year
    B.after six month
    C. noon
    D. fastly
    
    Select your answer:
    D
    
    hi.. u passed
    
    hi.. u finished

     

  8. بشكل بسيط ميثودولوجية Merise هي إحدى المهندسات المعلومات وطرق تطوير قواعد البيانات التي تم تطويرها في فرنسا.

    وتستخدم Merise لتصميم وتطوير نظم المعلومات، وتساعد على تحليل وتصميم قواعد البيانات وتوثيقها، وتتضمن العديد من المفاهيم والأدوات التي تسهل عملية تطوير النظم، ومن بين تلك المفاهيم الأساسية التي ذكرتها:

    Abstract Cycle (الدورة المجردة):

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

    Conceptual Data Model (نموذج البيانات المفهومي - CDM):

    يمثل تمثيلاً عالي المستوى لبيانات النظام وعلاقاتها بشكل مفهوم، ويساعد CDM في تحديد الكيفية التي تتفاعل بها البيانات داخل النظام دون الانتقال إلى التفاصيل التقنية.

    Logical Data Model (نموذج البيانات المنطقي - LDM):

     يستخدم لتحديد هيكل البيانات والجداول المستخدمة في قاعدة البيانات بشكل منطقي دون الاعتناء بالتفاصيل التقنية مثل أنواع البيانات والمفاتيح.

    Physical Data Model (نموذج البيانات الفعلي - PDM):

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

    Data Dictionary (قاموس البيانات):

    قاموس البيانات يحتوي على وصف مفصل لكل عنصر في قاعدة البيانات بما في ذلك الجداول والحقول والعلاقات والمفاتيح، ويهدف إلى توثيق هيكل البيانات والعلاقات بينها.

    Management Rules (قواعد الإدارة):

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

    وللمزيد من الشرح ابحث عن على جوجل واليوتيوب عن طريقة Merise وأيضًا يوجد كتاب كتاب "Merise: L'essentiel" by Jean-Claude Rolland.

    • أعجبني 1
  9. تحتاج إلى ما يلي:

    • فكرة مميزة للخدمة التي ستقدمها. يجب أن تكون الخدمة ذات قيمة للعملاء وقابلة للتسويق.
    • خطة عمل تحدد أهدافك وكيفية تحقيقها. يجب أن تتضمن الخطة العناصر التالية:
    1. وصف الخدمة التي ستقدمها.
    2. السوق المستهدف.
    3. المنافسين.
    4. النموذج الربحي.
    5. استراتيجية التسويق.
    • ستحتاج إلى فريق عمل يمتلك المهارات والخبرات اللازمة لتطوير وإطلاق وإدارة المنصة أو إدارتها أنت بنفسك إن كنت تمتلك الخبرة اللازمة.
    • ستحتاج إلى تمويل لتغطية تكاليف تطوير وإطلاق وإدارة المنصة.

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

    وإليك بعض الخطوات التفصيلية لإنشاء منصة إلكترونية لتقديم الخدمات:

    1. قم بإجراء بحث السوق لتحديد الحاجة إلى الخدمة وتأكد من أن هناك سوقًا كبيرًا للخدمات التي تنوي تقديمها.
    2. تطوير خطة عمل. وتلك هي الخطوة الأكثر أهمية في عملية إنشاء المنصة وستساعدك خطة العمل على تحديد أهدافك وكيفية تحقيقها.
    3. يمكنك إما تطوير المنصة بنفسك أو الاستعانة بمطور خارجي.
    4. بمجرد تطوير المنصة، ستحتاج إلى إطلاقها وبدء الترويج لها.
    5. بعد إطلاق المنصة، ستحتاج إلى إدارة محتواها وعملياتها.

    واجعل المنصة سهلة الاستخدام حيث يجب أن يكون من السهل على العملاء العثور على الخدمات التي يبحثون عنها واستخدامها.

    دليلك لاختيار أفضل منصات التجارة الإلكترونية

  10. بتاريخ 18 ساعة قال Ahmed Ebrahim11:

    اها لا يوجد قمت بحل المشكله استاذي 

    قمت بوضع الكود ف سكربت ف الصفحه الرئيسيه 

    ولكن هل يوجد حل اخر افضل؟

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

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

    أيضًا استخدام Optional chaining أي علامة ؟ لمنع قراءة العنصر في حال عدم وجوده في achieve.offsetTop.

    أيضًا إضافة شرط لمنع استكمال الكود في حال لم تتواجد العناصر وهو   if(!achieve || !nums) return

    let started;
    
    
    function startCount(el){
        let goal = el.dataset.goal;
        let count = setInterval(()=>{
            el.textContent++
            if(el.textContent == goal){
                clearInterval(count)
            }
        },9000/goal)
    }
    
    // ADD LISTENER TO ALL PAGES
    document.addEventListener('DOMContentLoaded', function(){
        achieve = document.querySelector('#achievements');
        nums = document.querySelectorAll('.num');
        started = false;
      
      if(!achieve || !nums) return
    
        // START COUNTER ON SCROLL
        window.onscroll = function(){
            if (window.scrollY >= achieve?.offsetTop-200){
                if (!started){
                    nums.forEach((num) => startCount(num))
                }
                started= true;
            }
        }
    });

     

    • شكرًا 1
  11. 1- عليك أولاً إنشاء قاعدة بيانات تحتوي على جدولين:

    • جدول المستخدمين ويحتوي على معلومات المستخدمين، مثل الاسم، والبريد الإلكتروني، والصلاحيات.
    • جدول الأدوار ويحتوي على أسماء الأدوار وصلاحياتها.

    2- ثم إنشاء نموذج تسجيل دخول لتسجيل المستخدمين في النظام.

    3- وعند تسجيل دخول المستخدم، يتم تحديد صلاحيته بناءً على الدور الذي تم تعيينه له في قاعدة البيانات.

    4- بعد ذلك يتم استخدام تلك الصلاحية لعرض الصفحة لكل مستخدم حسب صلاحيته.

    وإليك مثال بسيط:

    // إنشاء قاعدة بيانات
    $db = new PDO("mysql:host=localhost;dbname=mydb", "root", "");
    
    // إنشاء جدول المستخدمين
    $sql = "CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(255),
      email VARCHAR(255),
      role VARCHAR(255)
    );";
    $db->query($sql);
    
    // إنشاء جدول الأدوار
    $sql = "CREATE TABLE roles (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(255),
      permissions VARCHAR(255)
    );";
    $db->query($sql);
    
    // إدخال بيانات في جدول المستخدمين
    $sql = "INSERT INTO users (name, email, role) VALUES
      ('John Doe', 'johndoe@example.com', 'admin'),
      ('Jane Doe', 'janedoe@example.com', 'user');";
    $db->query($sql);
    
    // إدخال بيانات في جدول الأدوار
    $sql = "INSERT INTO roles (name, permissions) VALUES
      ('admin', 'all'),
      ('user', 'view');";
    $db->query($sql);
    
    // إنشاء نموذج تسجيل دخول
    echo '<form action="login.php" method="post">
      <input type="text" name="email" placeholder="البريد الإلكتروني">
      <input type="password" name="password" placeholder="كلمة المرور">
      <input type="submit" value="تسجيل الدخول">
    </form>';
    
    // تحديد صلاحية المستخدم
    if (isset($_POST['email']) && isset($_POST['password'])) {
      $email = $_POST['email'];
      $password = $_POST['password'];
    
      // تسجيل دخول المستخدم
      $sql = "SELECT * FROM users WHERE email = :email AND password = :password";
      $stmt = $db->prepare($sql);
      $stmt->bindParam(':email', $email);
      $stmt->bindParam(':password', $password);
      $stmt->execute();
    
      // الحصول على بيانات المستخدم
      $user = $stmt->fetch();
    
      // تحديد صلاحية المستخدم
      $role = $user['role'];
    } else {
      $role = null;
    }
    
    // عرض الصفحة حسب صلاحية المستخدم
    if ($role == 'admin') {
      // عرض الصفحة للمسؤول
      echo '<h1>صفحة المسؤول</h1>';
    } else if ($role == 'user') {
      // عرض الصفحة للمستخدم
      echo '<h1>صفحة المستخدم</h1>';
    } else {
      // عرض رسالة خطأ
      echo '<p>أنت غير مصرح لك بدخول هذه الصفحة.</p>';
    }

     

  12. ما ذكرته هو التالي:  

    أما UTF-8 هو ترميز تحويل الأحرف إلى لغة الآلة ويستخدم لتمثيل الأحرف في """الذاكرة""" ونقل البيانات عبر الشبكات، ثم تحويل الأعداد المخصصة للأحرف في Unicode إلى لغة الآلة (من خلال وحدة المعالجة المركزية).

    ولغة الآلة (Machine Language) تستخدم نظامًا من الأصفار والواحدات لتمثيل الأوامر والبيانات داخل الحاسوب، وذلك النظام يتمثل في تمثيل ثنائي (Binary)، حيث يُمثل الصفر والواحد أوامر الحاسوب والبيانات.

    أما نظام العد السادس عشر (Hexadecimal) فهو نظام يُستخدم في تمثيل البيانات بشكل أكثر قربًا إلى البشر، حيث يستخدم الأصفار والأحرف A إلى F لتمثيل القيم، يُستخدم نظام العد السادس عشر في العديد من السياقات التقنية، بما في ذلك تمثيل خانات الرام (RAM) وعناوين الذاكرة.

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

    أي أن لغة الآلة تعتمد على الأصفار والواحدات كوسيلة لتمثيل البيانات والأوامر في الحاسوب، ونظام العد السادس عشر هو نظام يُستخدم في العديد من السياقات التقنية بما في ذلك تمثيل خانات الرام.

  13. المدرب محقًا في قوله، أن الأحرف تتحول إلى أعداد عبر Unicode، ثم يقوم UTF-8 بتحويل الأعداد إلى لغة الآلة.

    وUnicode هو معيار عالمي لتمثيل الأحرف في الكمبيوتر، ويحدد Unicode مخططًا لكل حرف في العالم، ويخصص له رقمًا فريدًا، وذلك الرقم يسمى "القيمة الثنائية" أو "القيمة العشرية".

    أما UTF-8 هو ترميز تحويل الأحرف إلى لغة الآلة ويستخدم لتمثيل الأحرف في الذاكرة ونقل البيانات عبر الشبكات، ثم تحويل الأعداد المخصصة للأحرف في Unicode إلى لغة الآلة.

    مثال:

    • الحرف "أ" في Unicode له القيمة الثنائية 01000001.
    • يقوم UTF-8 بتحويل القيمة الثنائية 01000001 إلى لغة الآلة، وهي 0x61.

    هناك أيضًأ بعض التفاصيل الدقيقة التي يجب ملاحظتها.

    • Unicode ليس مجرد مجموعة من الأرقام، بل أيضًا مجموعة من الرموز ويتوافق كل رمز مع حرف أو علامة أو مجموعة من الأحرف.
    • UTF-8 ليس مجرد ترميز تحويل الأحرف إلى لغة الآلة بل أيضًا ترميز تحويل الأحرف إلى بايت Byte.
  14. الصورة التي تحاول تحميلها غير موجودة في مسار "/Internal storage/H.png".

    حاول نقل الصورة إلى مجلد download لديك ثم استخدم المسار التالي:

    /storage/emulated/0/Download/H.png

    أي كالتالي:

    Image=PhotoImage( file = '/storage/emulated/0/Download/H.png')

    وتأكد من كتابة اسم الصورة بشكل صحيح وأيضًا الصيغة الخاصة بها

  15. بتاريخ 22 دقائق مضت قال Aimen Zeffanine:

    اقصد بجانب عملك كمبرمج ان تدرس تخصص بعيد عن البرمجة {العلم الشرعي} مثلا هل يكفيك الوقت و الجهد خاصة يعني البرمجة ستبقى تتعلم طوالة حياتك ام التعلم صيصبح اسهل مع اكتساب الخبرة ؟ ما رؤيك 
    كما قلت لك ما اريد ان ادرس بعد ان اتمكن من البرمجة يعتمد على الحفظ

    من الممكن طبعًا،

    هل الأمر سهل؟ بالتأكيد لا.

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

    نفس الأمر عندما تريد أي شيء عليك أن تعلم أنك ستفقد شيئًا ما في المقابل سواء بشكل دائم أو لفترة من الوقت حسب طبيعة ما تريده.

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

    وتذكر دائمًا قليل دائم خير من كثير منقطع، فلو خصصت ساعة يوميًا لأي شيء بعد مرور سنة ستكون قد خصصت 365 ساعة وستجد نتيجة مختلفة تمامًا جراء ذلك.

    • أعجبني 1
    • شكرًا 1
  16. بتاريخ 18 دقائق مضت قال Raghad Jamal:

    شكرا جزيلا

    الان ظهرت لي مشاكل اخرى في انا النقاط متلاصقة كتيرا مع الكلام وايضا العنوان لايظهر بالشكل الدي اريد بالرغم من انني اعطيته خصائص في css

    عليك نقل العنصر الخاص بعرض swiper-pagination خارج الشرائح ووضعه بداخل العنصر الأب الذي يحمل كلاس m لديك.

    وسبب المشكلة الأخرى هي أنك لم تقومي بتضمين ملف style.css في ملف index.html عليك تضمينه كالتالي في عنصر head:

        <link rel="stylesheet" href="style.css" />

    أيضًا عليك إختيار العنصر بشكل صحيح فإما كتابة:

    h2.title
    
    أو 
    
    .title

    لاحظي أن الكلاس ملصق باسم العنصر ومعنى ذلك إختيار عنصر h2 الذي يحمل كلاس بنفس الاسم.

    • شكرًا 1
  17. أمر طبيعي ولكن.

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

    أي إنشاء مجلد لكل دورة وبداخل ذلك المجلد ننشيء مجلد لكل مسار وبداخله مجلدات للدروس والمشاريع والتطبيقات وبذلك يتم تنظيم الأمر وتصل بسهولة لما تريد.

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

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

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

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

    أي  يمكنك أن تنسى طريقة تطبيق المفهوم، لكن لا أن تنسى المفهوم نفسه.

    وستجد هنا تفصيل:

     

    • شكرًا 1
  18. بالطبع متوفر، لكن عليك تفقد نوعية المشاريع المعروضة ثم تعلم المهارات اللازمة للقيام بها، هل هي تتطلب PHP ولارافل ووردبريس؟ أم هل تتطلب تعلم تقنيات MERN؟ أي المطلوب لغات وتقنيات أخرى؟ تفقد المشاريع الخاصة بالويب واتخذ قرارك على أساس ذلك.

    نفس الأمر عندما تريد العمل بشركة عليك تفقد الوظائف المتاحة للمتبدئين أو خبرة سنة وما هي المهارات المطلوبة لذلك.

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

    وبخصوص الأسعار تفقد التالي فقد تم توضيح الأمر بالتفصيل:

    أيها المبرمج، كيف تُسعّر أعمالك؟

     

  19. تقصد بأنظمة التشغيل، نظام ويندوز ولينكس وماك؟ 

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

    بعد ذلك تستطيع تعلم العمل من خلال نظام لينكس لكونه شائع الاستخدام في السيرفرات، في حال كنت ستتعامل مع ذلك.

    أما عن أهمية  تعلم أنظمة التشغيل أي كيف تعمل كمبرمج تكمن في عدة نقاط، منها:

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

    وستتعلم ذلك من خلال لغة مثل C++ حيث ستتعلم طريقة إدارة الذاكرة العشوائية وخلافه.

    • أعجبني 1
  20. السؤال خاص بدورة علوم الحاسوب مسار أساسيات البرمجة لغة JavaScript  .درس 04. المتغيرات Variables، لذلك أرجو طرح السؤال أسفل الدرس في التعليقات أسفل الفيديو لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا.

    والغرض من الدرس هو تشغيل والوصول لكود جافاسكريبت في المتصفح، ولذلك نقوم بإنشاء ملف index.html ونضع به الكود التالي:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <title>أهلاً بك</title>
        <script src="index.js"></script>
      </body>
    </html>

    ثم ملف جافاسكريبت index.js كالتالي:

    let personName = 'ahmed';
    
    console.log(personName);

    وسيتم طباعة ahmed في الكونسول.

    وفي حال أردت الوصول إلى قيمة من المصفوفة فالـ index الخاص بها يبدأ من 0 ولذلك نطبع العنصر كالتالي:

    let personName = 'ahmed';
    
    console.log(personName);
    
    let students = ['ahmed', 'mohamed', 'mustafa']
    
    console.log(students[1])

    سيتم طباعة الاسم الثاني mohamed في المصفوفة لأنني كتبت 1 وليس 0.

    إليك مجلد المشروع في المرفقات.

    js-basics.rar

  21. لأن  بايثون تستخدم عددًا عشريًا مزدوجًا لتمثيل الأعداد العشرية، والأعداد العشرية المزدوجة هي أعداد عشرية تقريبية، مما يعني أنها لا يمكنها تمثيل جميع الأعداد العشرية بدقة.

    ففي العملية 9 * 0.01 * 10 الناتج يساوي 0.8999999999999999 لأن 0.01 هو رقم عشري مزدوج غير دقيق، وإن كنت تريد الحصول على الناتج الصحيح، فعليك استخدام عدد عشري دقيق، أي:

    1. استخدم نوعًا عشريًا دقيقًا، مثل Decimal.
    import decimal
    
    result = decimal.Decimal(9) * decimal.Decimal(0.01) * decimal.Decimal(10)
    print(result) #0.9000000000000000187350135405
    1. أو تقريب الرقم العشري المزدوج.
    result = round(9 * 0.01 * 10, 4)
    print(result) #0.9

     

    • أعجبني 1
  22. كل ما يمكنك فعله هو زيادة المساحة المخصصة للذاكرة العشوائية الوهمية على حاسوبك، حيث إنشاء ملف باسم Paging file، وهو ملف مخفي على محرك الأقراص الثابتة في نظام التشغيل Windows، ويستخدمه الـ Windows لتخزين البيانات التي لا يمكن وضعها في ذاكرة الوصول العشوائي (RAM)، وتسمى تلك  العملية بالترحيل، مما يسمح بالتالي:

    1. يسمح لـ Windows بتشغيل تطبيقات أو برامج تتطلب أكثر من ذاكرة الوصول العشوائي المتوفرة.
    2. يمنع Windows من التوقف عن العمل أو الانهيار بسبب نقص الذاكرة.
    3. يساعد في تحسين أداء Windows.

    قم بالبحث على اليوتيوب عن كيفية زيادة مساحة الرامات للكمبيوتر وستجد نتائج توضح كيفية تفعيل الـ Virtual memory من خلال ملف Pagefile.sys.

    • أعجبني 1
  23. أنت لا تستخدم onTap لتغيير مؤشر الصفحة، وذلك يعمل بشكل جيد عند التنقل للأمام، ولكن عند التنقل للخلف، فإن onTap لا يتم استدعاؤه.

    ويجب عليك استخدام onTapUp بدلاً من onTap، حيث أن onTapUp يتم استدعاؤه عندما يتم رفع الإصبع عن الزر، بغض النظر عن اتجاه التنقل.

    class DashboardScreenState extends State<DashboardScreen> {
      PageController? _pageController;
      int _pageIndex = 0;
      late List<Widget> _screens;
      final GlobalKey<ScaffoldMessengerState> _scaffoldKey = GlobalKey();
    
      @override
      void initState() {
        super.initState();
    
        _screens = [
          const HomeScreen(),
          const FavouriteScreen(),
          const CartScreen(),
          const MenuScreenNew()
        ];
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            key: _scaffoldKey,
            bottomNavigationBar:
            ConvexAppBar(
              items:  const [
                TabItem(icon: Icons.home, title: 'Home'),
                TabItem(icon: Icons.favorite, title: 'Like'),
                TabItem(icon: Icons.shopping_basket_rounded, title:'Cart'),
                TabItem(icon: Icons.person, title: 'Profile'),
              ],
    
              initialActiveIndex: _pageIndex,
              onTapUp: (int index){
                setState(() {
                  _pageIndex = index;
                });
              },
            ),
            body:
               PageView.builder(
                  controller: _pageController,
                  itemCount: _screens.length,
                  physics: const NeverScrollableScrollPhysics(),
                  itemBuilder: (context, index) {
                    return _screens[_pageIndex];
                  },
                ),
          );
      }
    }

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

×
×
  • أضف...