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

عبدالباسط ابراهيم

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

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

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

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

    11

أجوبة بواسطة عبدالباسط ابراهيم

  1. لربط نموذج تسجيل الدخول في Angular بقاعدة البيانات في Laravel:

    • إنشاء API في Laravel: يمكن استخدام Laravel Passport لإنشاء API موثوق بها في Laravel. يجب تثبيته باستخدام Composer وتكوينه وفقًا للتوثيق الرسمي. بعد ذلك، يمكن إنشاء وظيفة في Laravel لإرجاع بيانات تسجيل الدخول باستخدام Passport.
    • إنشاء ملف خدمة (service) في Angular: يمكن استخدام مكتبة HttpClient من Angular لإجراء مكالمات API. يمكن إنشاء ملف خدمة في Angular للاتصال بـ API الخاص بـ Laravel باستخدام HttpClient.
    • استخدام نموذج تسجيل الدخول في Angular:يمكن استخدام نموذج تسجيل الدخول في Angular للحصول على بيانات تسجيل الدخول من المستخدم باستخدام توجيه وظيفة إرسال النموذج.
    • إنشاء وظيفة في Angular لإرسال بيانات تسجيل الدخول إلى API الخاص بـ Laravel: باستخدام HttpClient. يجب تضمين بيانات تسجيل الدخول بشكل صحيح في الجسم الذي يتم إرساله إلى API.
    • كتابة وظيفة في Laravel للتحقق من صحة بيانات تسجيل الدخول: المرسلة من Angular. يجب التحقق من صحة اسم المستخدم وكلمة المرور باستخدام وظيفة التحقق المدمجة في Laravel.
    • استخدام البيانات المسترجعة من API الخاص بـ Laravelبعد التحقق من صحة بيانات تسجيل الدخول في Laravel، يمكن استخدام البيانات المسترجعة من API لتسجيل الدخول في التطبيق الخاص بك.

    هذه الخطوات الرئيسية لتنفيذ المطلوب يمكنك الإطلاع على المصادر التالية للمزيد من المعلومات 1 و 2 و 3

  2. بالإضافة للشرح السابق يمكنك  ل f-strings في Python توفر عدة مزايا أخرى، من بينها:

    • الدعم الكامل للتعابير الرياضية والتعابير الشرطية والدوال الرياضية وغيرها من التعابير المعقدة. 
    • إمكانية استخدام f-strings في أي سياق في Python، بما في ذلك دوال الطباعة (print) ورسائل التنبيه (assert) والأوامر الشرطية (if-else) وغيرها.
    • إمكانية استخدام f-strings لتكوين أسماء المتغيرات والدوال والكائنات الأخرى باستخدام تعابير Python.
    • إمكانية استخدام f-strings لإنشاء نصوص ديناميكية ومتغيرة تعتمد على البيانات التي تم إدخالها في الوقت الحالي.

    وللمزيد من التفاصيل يمكنك قراءة إجابة هذا السؤال حيث يوضح الشرح بالأمثلة 

     

  3.  سأقدم لك حلاً بإزالة الجزء المتعلق بـ @foreach؛ سنستخدم طريقة أخرى للتبديل بين اللغتين.

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

    الكود الجديد:

    //head
    
    @if (App::getLocale() == 'en')
        <link href="{{ asset('css1/rtl.css') }}" rel="stylesheet">
    @else
        <link href="{{ asset('css1/ltr.css') }}" rel="stylesheet">
    @endif
    //body
    
    <a id="toggleLanguage" href="#" class="language_icon">
        <i class="fa fa-language" style="font-size: 48px"></i>
    </a>
    
    <script>
        document.getElementById('toggleLanguage').addEventListener('click', function(e) {
            e.preventDefault();
            let currentLocale = '{{ App::getLocale() }}';
            let newLocale = currentLocale === 'en' ? 'ar' : 'en';
            let newUrl = '{{ LaravelLocalization::getLocalizedURL(newLocale, null, [], true) }}';
            window.location.href = newUrl;
        });
    </script>

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

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

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

    طريقة أخرى وهي تنفيذ المطلوب بدون  استخدام الدالة strlen() والدالة isupper() كما يلي

    • تبدأ الطريقة بتعريف مصفوفة sentence من نوع char بحيث تكون الحجم يساوي 51، وذلك لتمكين إدخال جملة تصل إلى 50 حرفًا، بالإضافة إلى الحرف النهائي الذي يعرف بـ null character والذي يتم إضافته تلقائيًا في نهاية الجملة.
    • ثم يتم تعريف متغير capital_count من نوع int ويتم تعيينه إلى القيمة الصفرية بدايةً.
    • ثم يقوم البرنامج بطباعة رسالة إلى المستخدم تطلب منه إدخال جملة للفحص، وذلك باستخدام الدالة printf().
    • ثم يتم تحديد المدخلات التي يقوم المستخدم بإدخالها باستخدام الدالة scanf()، والتي تقوم بقراءة المدخلات من المستخدم حتى يصل إلى حرف السطر الجديد \n أو الحد الأقصى للطول الذي يساوي 50 باستخدام التحكم في النسق %50[^\n]، وتخزين الجملة المدخلة في المصفوفة sentence.
    • ثم يتم تكرار جميع الحروف في الجملة باستخدام حلقة for، والتي تستمر حتى يتم الوصول إلى الحرف النهائي null character.
    • وفي كل تكرار للحلقة، يتم فحص الحرف الحالي إذا كان حرفًا كبيرًا أم لا باستخدام المقارنة بين الحرف وحروف الأبجدية الكبيرة، وذلك باستخدام العبارة
     if(sentence[i] >= 'A' && sentence[i] <= 'Z'
    

               وفي حال كان الحرف كبيرًا يتم زيادة قيمة متغير capital_count بمقدار 1.

    • وفي النهاية، يتم طباعة عدد الأحرف الكبيرة الموجودة في الجملة باستخدام الدالة printf() والتي تقوم بعرض قيمة متغير capital_count باستخدام النسق %d، وذلك باستخدام العبارة printf("Number of capital letters: %d\n", capital_count);، ويتم إرجاع القيمة 0 في نهاية البرنامج باستخدام العبارة return 0;.
  5. الحل الوحيد هو ان العميل يقوم بمراسلتك حتى يصبح جاري التنفيذ حتى الدعم الفني لا يقدر ان يساعدك حيث أن مؤخراً لا يقوم الدعم الفني باستلام الخدمة بدلاً من المشتري كما كان سابقاً

    لذلك ليس هناك حل آخر غير تحويل الخدمة من حالة بانتظار التعليمات وذلك برد العميل برسالة 

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

    كما أن يجب عليك عدم تنفيد الخدمة إلا بعد تفعيل المشتري لجميع الطلبات التي اشتراها

  6. لاحظت أنك قمت بإضافة علامة + قبل قيمة userInput.value في السطر الأخير من الدالة myFunction()، وهذا السبب في ظهور قيمة 0 عند تقديم النموذج بدون قيمة في حقل الإدخال. يمكنك حل هذه المشكلة عن طريق إضافة شرط يتحقق من أن حقل الإدخال ليس فارغًا قبل تعيين قيمته إلى العنصر innerHTML. وبالإضافة إلى ذلك، يمكنك إزالة السطر الذي يحتوي على الدالة myFunction() من زر الإرسال (submit) لأنها لن تحل المشكلة التي واجهتك. ولحل هذه المشكلة يمكنك استخدام الكود التالي:

    <article>
        <form id="form" action="/" method="get">
            <h1>Hello, write your name</h1> <br>
            <div class="inputBox">
                <input id="userInput" name="Name" type="text" required> 
                <span>Last Name</span>
                <br>
                <br>
                <button type="submit" required>Submit</button>
                <h1 id="printName"></h1>
            </div>
        </form>
    </article>
    
    <script>
        const form = document.querySelector("#form");
        const userInput = document.querySelector("#userInput");
        const printName = document.querySelector("#printName");
    
        form.addEventListener("submit", function(event) {
            event.preventDefault();
    
            if (userInput.value.trim() !== "") {
                printName.innerHTML = userInput.value;
            } else {
                printName.innerHTML = "";
                userInput.setCustomValidity("Please enter your name");
                userInput.reportValidity();
                userInput.focus();
            }
        });
    </script>

    في هذا الكود، قمت بإضافة مستمع حدث submit إلى النموذج (form) باستخدام الدالة addEventListener()، والتي تتيح لك تنفيذ دالة عند حدوث الحدث. ثم، وضعت الشرط الذي يتحقق من أن حقل الإدخال ليس فارغًا باستخدام الدالة trim() التي تزيل الفراغات العائمة من النص. إذا كان حقل الإدخال غير فارغٍ، ستعيد الدالة قيمة الإدخال إلى العنصر innerHTML، وإذا كان فارغًا، يتم إزالة النص من العنصر innerHTML وتعيين رسالة الخطأ المخصصة (setCustomValidity()) إلى "Please enter your name". ثم يتم استدعاء الدالة reportValidity() ليتم عرض رسالة الخطأ المخصصة، ويتم وضع التركيز على حقل الإدخال باستخدام الدالة focus().

  7. في البرمجة، تشير كلمة "الكائن" (Object) إلى أي شيء يمكن التلاعب به في البرنامج. ويمكن تقسيم الكائنات في البرمجة إلى قسمين رئيسيين: الكائنات القابلة للتكرار (Mutable Objects) والكائنات غير القابلة للتكرار (Immutable Objects).

    الكائنات القابلة للتكرار (Mutable Objects): هي الكائنات التي يمكن تغييرها أو تعديلها بعد إنشائها. وهذا يعني أن البرنامج يمكنه تغيير قيم الكائنات القابلة للتكرار خلال تنفيذه. وبعض أمثلة الكائنات القابلة للتكرار تشمل: القوائم (Lists)، والمصفوفات (Arrays)، والمجموعات (Sets)، وقواعد البيانات (Databases).

    الكائنات غير القابلة للتكرار (Immutable Objects): هي الكائنات التي لا يمكن تغييرها بعد إنشائها. وهذا يعني أن البرنامج لا يمكنه تعديل قيم الكائنات غير القابلة للتكرار. وبعض أمثلة الكائنات غير القابلة للتكرار تشمل: الأعداد (Numbers)، والسلاسل (Strings)، والتفاصيل (Tuples)، والقواميس (Dictionaries).

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

    هنا بعض الأمثلة على الكائنات القابلة للتكرار والغير القابلة للتكرار في Python:

    الكائنات القابلة للتكرار:

    القوائم (Lists)

    يمكن إنشاء قائمة جديدة واضافة عنصر جديد إليها باستخدام الدالة append():

    my_list = [1, 2, 3, 4] 
    my_list.append(5) 
    print(my_list) # [1, 2, 3, 4, 5]

    المصفوفات (Arrays)

    يمكن إنشاء مصفوفة جديدة والتعامل معها باستخدام المكتبة numpy:

    import numpy as np 
    my_array = np.array([1, 2, 3, 4, 5]) 
    print(my_array) # [1, 2, 3, 4, 5]
    

    الكائنات غير القابلة للتكرار:

    الأعداد (Numbers)

    يمكن إنشاء متغير جديد وتعيينه بقيمة رقمية:

    my_number = 10 
    print(my_number) # 10

    السلاسل (Strings)

    يمكن إنشاء سلسلة جديدة والتلاعب بها باستخدام العديد من العمليات المتاحة للسلاسل، مثل الجمع والتكرار:

    my_string = "Hello" 
    print(my_string + " World") # Hello World print(my_string * 3) # HelloHelloHello
    

     

  8. بتاريخ 4 ساعة قال Abdulmalek:

    انا استخدم asp.net. لانشاء موقع بي لغة c#.  Css html. Java.   Ext الخ

    يمكن استخدام إطار العمل ASP.NET MVC لإنشاء صفحة واحدة تحتوي على تفاصيل كل منتج، والتي يمكن الوصول إليها باستخدام معرف فريد لكل منتج. يمكن استخدام الإطار Entity Framework لإنشاء موديل لكل منتج وحفظه في قاعدة البيانات، ومن ثم استخدام عرض (View) واحد لعرض تفاصيل المنتجات. يمكن استخدام رابط ديناميكي (Dynamic Link) يحتوي على معرف المنتج في عنوان URL للوصول إلى الصفحة الخاصة بتفاصيل المنتج.

    لنفترض أن لديك تطبيق ASP.NET MVC للإعلانات على الإنترنت وتريد إنشاء صفحة تفاصيل المنتجات التي يتم الوصول إليها عند النقر على إعلان منتج. سنفترض أيضًا أن لديك قاعدة بيانات تحتوي على جدول يسمى Products يحتوي على معلومات المنتجات.

    • يتم إنشاء موديل (Model) باستخدام Entity Framework ويحتوي على جميع المعلومات المتعلقة بالمنتج، مثل الاسم والوصف والصور والسعر وغيرها. يمكن إنشاء موديل بالشكل التالي:
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
        public string ImageUrl { get; set; }
    }
    • يتم إنشاء قاعدة بيانات باستخدام Entity Framework وإضافة جدول يحتوي على بيانات المنتجات. يمكن إنشاء قاعدة بيانات باستخدام أدوات إدارة قاعدة البيانات مثل Microsoft SQL Server أو MySQL أو PostgreSQL أو Oracle. يمكن إنشاء قاعدة بيانات بالشكل التالي:
    CREATE TABLE Products
    (
        Id INT PRIMARY KEY IDENTITY,
        Name NVARCHAR(50) NOT NULL,
        Description NVARCHAR(MAX),
        Price DECIMAL(18, 2) NOT NULL,
        ImageUrl NVARCHAR(MAX)
    )
    • يتم إنشاء عرض (View) واحد لعرض تفاصيل المنتجات. يمكن استخدام أدوات ASP.NET MVC مثل Razor View Engine لإنشاء العرض. يمكن إنشاء العرض بالشكل التالي:
    @model Product
    
    <h2>@Model.Name</h2>
    <p>@Model.Description</p>
    <p>Price: @Model.Price</p>
    <img src="@Model.ImageUrl" alt="@Model.Name" />
    • يتم إنشاء إجراء تحكم (Controller Action) لاسترداد بيانات المنتجات من قاعدة البيانات وعرضها في العرض (View). يمكن استخدام أدوات ASP.NET MVC لإنشاء الإجراء. يمكن إنشاء الإجراء بالشكل التالي:
    public class ProductController : Controller
    {
        private readonly ApplicationDbContext _db;
    
        public ProductController(ApplicationDbContext db)
        {
            _db = db;
        }
    
        public IActionResult Details(int id)
        {
            var product = _db.Products.Find(id);
            if (product == null)
            {
                return NotFound();
            }
    
            return View(product);
        }
    }
    • إضافة رابط ديناميكي (Dynamic Link) يحتوي على معرف المنتج في عنوان URL لكل إعلان على الموقع
    <a href="@Url.Action("Details", "Product", new { id = product.Id })">@product.Name</a>

     

  9. في الشرط الأخير في الكود، المتعلق بـ "Awesome Rows and Columns"، تم استخدام الشرط الخاص بـ "Awesome Diagonals" بشكل خاطئ، حيث تم إدراجه كجزء من شرط الصفوف والأعمدة والقطرين.

    بالتحديد، كان الخطأ في هذه الجملة:

    else if (row1 == col1 || row1 == col2 || row1 == col3 || row1 == diag1 || row1 == diag2 || row2 == col1 || row2 == col2 || row2 == col3 || row2 == diag1 || row2 == diag2 || row3 == col1 || row3 == col2 || row3 == col3 || row3 == diag1 || row3 == diag2) { printf("Awesome Rows and Columns"); }

    حيث تم وضع "diag1" و "diag2" كجزء من شرط الصفوف والأعمدة والقطرين. وبالتالي، لم يتم تمييز الحالة المراد الإشارة إليها بشكل صحيح.

    لحل هذه المشكلة، يجب تحريك الشرط الخاص بـ "Awesome Diagonals" إلى موضعه الصحيح، كما هو موضح في الكود التالي:

    if (row1 == row2 && row2 == row3 && row3 == col1 && col1 == col2 && col2 == col3 && col3 == diag1 && diag1 == diag2) {
        printf("Awesome Numbers");
    } else if (row1 == row2 || row1 == row3 || row2 == row3) {
        printf("Awesome Rows");
    } else if (col1 == col2 || col1 == col3 || col2 == col3) {
        printf("Awesome Columns");
    } else if (diag1 == diag2) {
        printf("Awesome Diagonals");
    } else if (row1 == col1 || row1 == col2 || row1 == col3 ||
               row2 == col1 || row2 == col2 || row2 == col3 ||
               row3 == col1 || row3 == col2 || row3 == col3) {
        printf("Awesome Rows and Columns");
    } else if (col1 == diag1 || col2 == diag2) {
        printf("Awesome Columns and Diagonal");
    }

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

  10. إذا كنت قد قمت بتثبيت مفسر لغة Ruby مسبقاً والمشكلة كما هي تحتاج إلى إضافة مسار تنفيذ Ruby إلى متغير بيئة النظام PATH باتباع هذه الخطوات:

    • قم بفتح قائمة "بدء" وابحث عن "Environment Variables" وانقر فوق "Edit the system environment variables".
    • انقر فوق "Environment Variables".
    • في قسم System variables، انتقل إلى الأسفل وابحث عن المتغير "Path"، ثم انقر على "Edit".
    • انقر على "New" وأدخل مسار تنفيذ Ruby. على سبيل المثال، إذا كان Ruby مثبتًا في المسار الافتراضي، يمكنك إضافة المسار التالي:``C:\Ruby27-x64\bin` ملاحظة: استبدل C:\Ruby27-x64 بالمسار الفعلي إلى مجلد تثبيت Ruby.

    انقر فوق "OK" لإغلاق جميع النوافذ.

    افتح نافذة جديدة من سطر الأوامر أو PowerShell وحاول تشغيل أمر Ruby مرة أخرى.

  11. يمكن استخدام أي لغة برمجة لشرح المفاهيم الكائنية، بما في ذلك Java و Python وغيرها من اللغات. ومع ذلك، يتم استخدام Python  لشرح المفاهيم الكائنية لعدة أسباب، منها:

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

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

    • أعجبني 1
  12. بتاريخ 2 ساعة قال Yousef Ahmed8:

    هل معني ذلك أن دورة PHP مثلا تشمل اساسيات HTML و CSS و JavaScript 

    بمجردك حصولك على أياً من دورات حسوب يتم فتح المسار الأول من بقية الدورات الموجودة بأكاديمية حسوب لذلك إذا كنت مهتماً بتعلم تطوير الواجهات الأمامية بجاني تعلم ال php فذلك يتيح لك تعلم أساسيات HTML و CSS و JavaScript و jQuery وهذه المهارات هي الأساسيات المطلوبة في مجال ال frontend 

    كما أن هناك عرض موجود حالياً طوال شهر رمضام يسمح لك بالحصول على دورة مجانية أي دورتين بسعر دورة واحدة فيمكنك الحصول على دورة تطوير واجهات المستخدم + تطوير تطبيقات الويب بواسطة php بسعر دورة واحدة

    بتاريخ 2 ساعة قال Yousef Ahmed8:

    هل هذه الإمكانيات تمكنني من عمل واجهات امامية

    بالطبع تمكنك من تطوير واجهات أمامية بدون أي مشكلة ولكن هناك بعض المفاهيم التي يجب عليك تعلمها لم يتم شرحها في المسار الأول ولكن كلغات فيمكنك تطوير أي واجهة أمامية بال HTML و CSS و JavaScript 

    كما أن حتى تصبح frontend محترف يجب عليك تعلم بعض المهارات المتقدمة والفيديو التالي يشرح بالتفصيل هذه المهارات 

     

  13. ربما تكون المشكلة في اسم ال class الخاص بالأيقونات حيث أن الإصدار السادس وهو الأحدث مختلف عن الإصدارات القديمة فمثلاً 

    إذا كنت تستخدم الإصدار السادس فسيكون الكود مشابه للشكل التالي

    <i class="fa-solid fa-user"></i>

    أما إذا كنت تستخدم إصدار قديم فسيكون كما بالشكل التالي

      <i class="fas fa-user"></i>

    لاحظ الفرق بين الكود الأول والثاني

    كما أن هناك بعض الأيقونات الغير مجانية فمثلاً التنسيقات Regular و Light و Duotone غير مجانية فإذا كنت تستخدم التسيقات التالية فلن تظهر

    fa-regular	
    fa-light	
    fa-thin
    fa-duotone	
    fa-sharp 
    

     

  14. تتبع جوجل أدسنس مجموعة من المعايير للحفاظ على الجودة والمصداقية والموثوقية في الإعلانات التي يتم عرضها، وتشمل هذه المعايير:

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

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

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

    • أعجبني 1
  15. تعتمد على الظروف الخاصة بالمدونة. بعض الآثار المحتملة لترك المدونة دون الاهتمام بها تشمل:

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

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

    • أعجبني 1
  16. كلا استخدام CDN وتنزيل المكتبة محليًا لهما مزايا وعيوبهما الخاصة، ويعتمد الاختيار على الاحتياجات والظروف الخاصة بك.

    يمكن أن يكون استخدام شبكة توزيع المحتوى (CDN) للمكتبات الشائعة مثل jQuery وBootstrap وFont Awesome مفيدًا لأنه يوفر العديد من الفوائد، مثل:

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

    من ناحية أخرى ، يمكن أيضًا أن يكون تنزيل المكتبة محليًا له بعض المزايا ، مثل:

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

    بشكل عام، يعتمد الاختيار بين استخدام CDN أو تنزيل المكتبة محليًا على الاحتياجات والظروف الخاصة بك. 

    • أعجبني 1
  17. لغة البرمجة Ruby هي لغة برمجة للأغراض العامة. يتم استخدامه في مجموعة واسعة من المجالات ، ولكن اشتهرت كلغة لتطبيقات الويب ، بسبب إطار عمل Ruby on Rails.تجعل طبيعة الغرض العام من Ruby مناسبة لمجموعة واسعة من مهام البرمجة ، تمامًا مثل Perl و Python واللغات الأخرى ذات الأغراض العامة. تركز الميزات الرئيسية لـ Ruby على "سعادة" المطور وسهولة الاستخدام ، مما يجعلها لغة جيدة لأولئك الذين يتعلمون البرمجة فقط ولأولئك الذين يرغبون في إنجاز المزيد باستخدام كود أقل. إنها ميزات منتشرة وموجهة للكائنات تجعلها بديهية للغاية.

    • يمكن لمهندسي DevOps استخدام Ruby في البرمجة النصية من جانب الخادم وإدارة التكوين. على سبيل المثال ، Puppet هو برنامج مفتوح المصدر شائع مكتوب بلغة Ruby لإدارة تكوين الخادم. 
    • يمكن لمطوري الأجهزة المحمولة استخدام RubyMotion لإنشاء تطبيقات أصلية لنظامي التشغيل iOS و Android باستخدام لغة Ruby ، بدلاً من استخدام لغة مختلفة لكل نظام أساسي (Objective-C / Swift for iOS و Java لنظام Android).
    • بالنسبة لتطبيقات سطح المكتب ، يمكن أيضًا استخدام RubyMotion لتطوير تطبيقات OSX. 

    كما توجد الكثير من التطبيقات الأخرى لهذه اللغة ولكن السؤال الأهم  هل يستحق تعلم لغة Ruby في عام 2023 ؟

    الشعبية 

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

    يبسط منطق الأعمال لدى Ruby بنية جميلة وأنيقة تجعل تنفيذ منطق الأعمال المعقد أكثر بساطة. علاوة على هيكل إطار عمل Ruby on Rails،  تجعل التطوير منظمًا وسهل الكتابة وقراءة التعليمات البرمجية.

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

    ويعتبر لغة Ruby منتشرة بسبب إطار عمل Ruby on Rails لذلك تلخيصاً لا يزال Ruby on Rails مناسبة في عام 2023 وستظل مناسبة لبضع سنوات قادمة. إنها منصة بسيطة وفعالة لبناء نماذج أولية سريعة و MVP وأي نوع من تطبيقات / خدمات الويب.إنه يقلل من وقت التطوير ويساعدك على الوصول إلى السوق في وقت قصير حقًا.

  18. يمكنك استخدم الحزمة HijriDateLib لتحويل التواريخ الهجرية إلى Gregorian 

    أولًا يجب تضمين ملف المكتبة في ملف php هكذا:

    <?php require_once('hirji.class.php');
    echo (new hijri\datetime());

    يعرض: 8 شعبان 1436هـ

    ويوجد العديد من الدوال بحيث يمكنك التحويل بين التواريخ المختلفة فمثلاً 

    • GregorianToHijri تحويل من التقويم الجريجوري (المعمول به حاليا في جميع الدول) إلى التقويم الهجري
    • HijriToGregorian تحويل من التقويم الهجري إلى الجريجوي

    مميزات هذه المكتبة

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

    • يمكن لأسماء المتغيرات أن تحتوي فقط على الحروف (بحروف كبيرة وصغيرة) والأرقام والشرطة السفلية (_).
    • لا يمكن أن تبدأ أسماء المتغيرات بالأرقام.
    • لا يمكن أن تكون أسماء المتغيرات مفتاحية محجوزة في Python (مثل if، else، while، for، إلخ).
    • تُميِّز أسماء المتغيرات بين الأحرف الكبيرة والصغيرة، وهذا يعني أن "myVariable" و"myvariable" هما اسمان مختلفان لمتغير واحد.
    • يفضل أن تكون أسماء المتغيرات واضحة ووصفية، ويجب أن تعكس الغرض والمعنى الذي يتم استخدام المتغير له.

    فيما يلي بعض الأمثلة على أسماء المتغيرات الخاطئة في Python:

    • 123abc: يبدأ اسم المتغير بالأرقام.
    • my-variable: يحتوي اسم المتغير على علامة شرطة (-) بدلاً من الشرطة السفلية (_).
    • if: اسم المتغير يحتوي على كلمة محجوزة في Python.
    • my var: يحتوي اسم المتغير على مسافة بين الكلمات بدلاً من استخدام الشرطة السفلية (_).
  20. بتاريخ 3 ساعة قال اسامة الضناوي:

    اريده ان يبعد مسافة صغيرة نحو اليسار عند عمل hover ثم يعود مكانه .

    هل تقصد أنه تريد العنصر أن يذهب لليسار ويعود لمكانه عند الحدث hover أما تريد أن يذهب لليسار وبعد ال hover يرجع مكانه ؟

    إذا كنت تقصد الحالة الأولى فيمكنك استخدام ال animation كما بالشكل التالي

    HTML:

    <input type="button" value="Submit">

    CSS:

    input[type=button] {
      position: relative;
      transition: transform 0.3s ease-in-out;
    }
    
    input[type=button]:hover {
      animation-name: move-left;
      animation-duration: 0.3s;
      animation-fill-mode: forwards;
    }
    
    @keyframes move-left {
      0% {
        transform: translateX(0);
      }
      50% {
        transform: translateX(-5px);
      }
      100% {
        transform: translateX(0);
      }
    }

    في هذا المثال، تم استخدام transition لتحريك الزر بشكل سلس عند ال hover، ويتم تطبيق الحركة بواسطة animation باستخدام @keyframes. تم تحريك الزر بمقدار 5 بكسل إلى اليسار في نصف الوقت باستخدام الخاصية transform: translateX(-5px).

    ثم تم استخدام animation في الزر، حيث تم تعيين مدة الحركة animation-duration إلى 0.3 ثانية وتم تعيين اسم الحركة animation-name إلى move-left، وهو اسم الـ @keyframes الذي تم تحديده سابقًا. تم استخدام animation-fill-mode لجعل الزر يبقى في مكانه بعد انتهاء الحركة.

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

  21. مشكلة csrf mismatch token تحدث عادة عندما يتم إرسال طلب POST من خلال React لتسجيل الدخول إلى Laravel، وذلك لأن Laravel يستخدم حماية CSRF (Cross-Site Request Forgery) كإجراء أماني إضافي.

    لحل هذه المشكلة، يمكنك إما تعطيل حماية CSRF بشكل مؤقت في Laravel عن طريق إزالة الحماية من الـ middleware، أو استخدام CSRF token في طلبات React.

    إذا كنت ترغب في استخدام CSRF token، فيمكنك القيام بما يلي:

    • قم بإنشاء ملف في React يسمى csrf.js وضع فيه الكود التالي:
    import axios from 'axios';
    
    const csrfToken = document.head.querySelector('meta[name="csrf-token"]').content;
    
    axios.defaults.headers.common['X-CSRF-TOKEN'] = csrfToken;
    • ضع الملف csrf.js في مجلد الـ helpers في React.
    • قم بتضمين csrf.js في ملف التكوين الخاص بك في React، عن طريق إضافة السطر التالي:
    import './helpers/csrf';
    • بعد ذلك، سيتم إضافة CSRF token إلى رأس كل طلب axios من React، مما يمكن لـ Laravel التحقق من صحة الطلب.
  22. الخطوات الأساسية في إنشاء نظام المستخدمين هي:

    • إنشاء جدول في قاعدة البيانات لتخزين معلومات المستخدمين وصلاحياتهم: يتم إنشاء جدول يحتوي على حقول لاسم المستخدم وكلمة المرور ودور المستخدم. يمكن أيضًا إضافة حقول إضافية حسب احتياجات التطبيق.
    • إضافة بعض البيانات الافتراضية إلى جدول المستخدمين: يتم إضافة بعض الحسابات الافتراضية التي يمكن استخدامها لتسجيل الدخول فيما بعد. يمكن أيضًا للمسؤولين إضافة المزيد من المستخدمين وتحديد صلاحياتهم.
    • إنشاء صفحة تسجيل الدخول login.php: تستخدم هذه الصفحة لتحقق من اسم المستخدم وكلمة المرور وتحديد دور المستخدم. يتم استخدام الطريقة POST لنقل بيانات تسجيل الدخول مثال على ذلك . 
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $username = $_POST['username'];
        $password = $_POST['password'];
      
        $query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
        $result = mysqli_query($conn, $query);
      
        if (mysqli_num_rows($result) == 1) {
          $row = mysqli_fetch_assoc($result);
          $_SESSION['user_id'] = $row['id'];
          $_SESSION['user_role'] = $row['role'];
          header('Location: profile.php');
          exit;
        } else {
          $error = 'Invalid username/password';
        }
      }

       

    • إنشاء صفحة الملف الشخصي profile.php: تستخدم هذه الصفحة لتحقق من دور المستخدم وتوجيهه إلى الصفحة المناسبة، بحيث يمكن للإداريين الوصول إلى صفحة الإدارة والأطباء الوصول إلى صفحة الأطباء والممرضين الوصول إلى صفحة الممرضين والمرضى الوصول إلى صفحة المرضى مثال على ذلك
      session_start();
      if (!isset($_SESSION['username']) || !isset($_SESSION['role'])) {
          header("Location: login.php");
          exit();
      }
      
      if ($_SESSION['role'] == 'admin') {
          header("Location: admin.php");
          exit();
      } elseif ($_SESSION['role'] == 'doctor') {
          header("Location: doctor.php");
          exit();
       
    • إنشاء صفحات المستخدمين الفردية: يتم إنشاء صفحات المستخدمين الفردية وتصميمها وفقًا للاحتياجات المحددة، بحيث تحتوي صفحة الإدارة على الوظائف التي يمكن للإداريين القيام بها وصفحة الأطباء تحتوي على الوظائف التي يمكن للأطباء القيام بها وهكذا.

     

  23. سأشرح لك خدمة ال Web Scraping من عدة إتجاهات مثل 

     السوق والطلب على هذه الخدمة :

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

    وفقاً للعديد من منصات العمل الحر على الإنترنت، فإن طلبات وظائف ال Web Scraping قد ارتفعت بنسبة 129% في السنوات الخمس الماضية.

    • حسب موقع Freelancer، يتم تسجيل أكثر من 2 مليون مهمة ويب سكرابينغ كل عام على المنصة.

    • تشير التقديرات إلى أن سوق خدمات ال Web Scraping العالمي سيصل إلى 4.16 مليار دولار بحلول عام 2026.

     اللغات والمكتبات:

    في عام 2023، يعتبر Python الخيار الأفضل لل Web Scraping. واحدة من أشهر المكتبات لسكرابينغ Node.js هي Crawlee، بقدراتها المتقدمة لمنع الحظر. بالنسبة لأتمتة المتصفح، فإن Selenium و Playwright هما الأدوات المفضلة، حيث يتيحان تقديم JavaScript على المواقع الديناميكية، والتحكم في المتصفح الخفي وأتمتة سير العمل.

    مكافحة ال Web Scraping:

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

     اتجاهات ال Web Scraping لعام 2023:

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

    تطوير أدوات وبرامج جديدة لل Web Scraping توفر تحسينات في الأداء والدقة والسرعة والسهولة في الاستخدام.

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

  24. بما أنك تريد الحصول على عمل في أقرب فرصة متاحة فأقرب مسار أو مجال يمكنك العمل به حالياً ( في مجال تطوير الويب كما ذكرت أن تريد هذا المجال ) 

    هو تعلم مجال ال frontend أو مجال تطوير واجهات المستخدم حيث يمكنك إتقان هذا المجال الموجود في مجال تطوير الويب والبحث عن عمل بجانب تطوير مهاراتك سواء في ال frontend أو التكملة في مجال آخر

    لماذا مسار ال frontend جيد بالنسبة لك ؟

    • لأنك ببساطة قمت بتعلم ال html و ال css أي قمت بالدراسة في هذا المجال مسبقاً فالأفضل هو التكملة به
    • يمكنك التكملة على هذا المجال وتعلم ال backend لاحقاً بالتزامن مع البحث عن عمل في مجال ال frontend
    • يوجد الكثير من المصادر لتعلم هذا المجال أكثر من غيره

    كيف يمكنك تعلم هذا المجال ال frontend ؟

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

    ونصيحة لك تعلم أكمل دراسة دورة أساسيات علوم الحاسوب بالتزامن مع دراسة مجال ال frontend لأم هذه الدورة هي بناء للأساسيات لك في مجال علوم الحاسوب وهي مفيدة جداً في البرمجة

  25. يوجد العديد من الأمثلة والتطبيقات على موقع github التي توفر لك هذا التطبيق وهي مفتوحة المصدر فيمكنك تحميلها والتعديل عليها والتعلم منها لإكتشاف الكثير من المهارات التي لم تكن تعرفها 

    لذلك قم بالدخول ل github وقم بالبحث عن عن اسم اللعبة بالإضافة للغة التي تريدها وستطهر لك العديد من المستودعات وفي حالة وجود كود لم تعرفه أو مشكلة واجهتك يمكنك إضافة سؤال وسيتم الإجابة عليك 

    ومثال يمكنك الإطلاع على المشاريع الموجودة بهذه الصفحة

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

×
×
  • أضف...