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

Mustafa Suleiman

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

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

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

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

    296

كل منشورات العضو Mustafa Suleiman

  1. أهلا بك حمزة، الإشتراك في دورات الأكاديمية يتم من خلال الدفع عن طريق باي بال أو بطاقة الإئتمان أو بطاقة الهدية وجميعها تحتاج إلى الدفع بالدولار. ولذلك هناك حلان، الأول وهو أن تقوم بشحن بطاقة تقبل بالشراء من على الإنترنت ودفع تكلفة الدورة وهي 290 دولار للدورة الواحدة مع الأخذ في الحسبان أن في مصر يتم وضع 10% من إجمالي المبلغ المدفوع كرسوم تحويل عملة ليصبح المبلغ هو 320 دولار وقم بضرب المبلغ في السعر الرسمي للبنك الخاص بالفيزا التي ستقوم بالشراء من خلالها. والحل الثاني هو أن تقوم بالدفع إلى وسيط أو إلى أي شخص آخر ليدفع لك تكلفة الدورة، أو أن يقوم بشراء بطاقة هدية بتكلفة الدورة وستسخدمها لشراء الدورة. ولا تنسى عرض رمضان حيث يوفر لك اشتراك دورتين بثمن دورة واحدة. عرض رمضان 2023 وللمزيد من الشرح حول بطاقة الهدية وطرق الدفع أرجو منك قراءة الإجابات على السؤال التالي. وهنا توضيح لكيفية الوصول للدورات الخاصة بك بعد الإشتراك. وبخصوص الدفع بالجنيه، فأرجو منك الاستفسار عن ذلك من خلال التحدث لمركز المساعدة في أكاديمية حسوب.
  2. لا مشكلة في ذلك، لكن عليك بتقبل فكرة أن المدونة بحاجة إلى فترة تتراوح من 3 من إلى 6 أشهر لتعود لتحقيق النتائج وتحقيق ترتيب في جوجل. وطالما المدونة في بدايتها فلا مشكلة، والأفضل هو كتابة مقال كبير كل فترة طالما لن توفر محتوى بشكل يومي أو شبه يومي، من الممكن أن تخصص يومي الخميس والجمعة للكتابة والنشر.
  3. الدوال لا تنتمي لمكتبة Spatie، فدالة "text()" ودالة "sentences()" تنتميان إلى مكتبة PHP الأساسية (Core PHP) ويمكن استخدامهما في أي تطبيق PHP دون الحاجة إلى تثبيت مكتبات إضافية. ما قصدته هو استخدام مكتبة Spatie لتحويل ملفات PDF إلى نص، وقطع النص إلى جمل، وهي مكتبة PHP مفتوحة المصدر توفر العديد من الوظائف المفيدة لتطوير تطبيقات الويب. وذلك عن طريق وظيفة extract() التي تأخذ اسم الملف الذي تريد استخراج النص منه كمدخل، ويتم إرجاع النص كنص عادي (string) ومن ثم يمكن استخدام وظائف النص العادية في PHP مثل explode() لقطع النص إلى جمل. مثال على ذلك: use Spatie\PdfToText\Pdf; // اسم الملف الذي نريد استخراج النص منه $filename = 'file.pdf'; // استخراج النص من الملف $text = Pdf::extract($filename); // قطع النص إلى جمل $sentences = explode('.', $text); // اختبار طباعة أول جملة echo $sentences[0]; يجب تثبيت مكتبة Spatie باستخدام Composer قبل استخدامها في التطبيق، ويمكن الاطلاع على المزيد من الوظائف التي توفرها المكتبة في الوثائق الرسمية للمكتبة على موقع GitHub.
  4. سؤالك غير واضح أرجو تعديل نص السؤال وتوضيحه. وإذا كان سؤالك بخصوص أيقونات font-awesome فعليك بقراءة الإجابات التالية، ففيها شرح استخدام مكتبة font-awesome. وأيضًا تأكد من أنك تستخدم أيقونات مجانية free من خلال تحديد خيار free عند البحث عن الأيقونات وأيضًا تحديد رقم إصدار المكتبة عند البحث سواء 5 أو 6 ليتوافق مع إصدار المكتبة الذي قمت باستيراده في كود HTML الخاص بك. وذلك هو رابط الإصدار 6.4 والذي يجب وضعه ضمن عنصر head في الصفحة التي تريد ظهور الأيقونات بها. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  5. قد تم شرح كيف يتم تغيير لون الزر في المقال، ويمكنك أيضًا استخدام أكواد CSS لتحديد اللون الذي تريده، أو استخدام الألوان المحددة مسبقًا من قبل ووردبريس. ولوضع رمز داخل الزر، يمكنك استخدام HTML لوضع الرمز داخل العنصر زر، باستخدام رموز Font Awesome أو Glyphicons أو أي رمز آخر تريده. على سبيل المثال ، يستخدم الكود التالي لإنشاء زر أحمر اللون مع رمز تعجب بداخله: <button class="btn btn-danger"><i class="fa fa-thumbs-up"></i> Like</button> هذا يستخدم مكون الأزرار في ووردبريس مع تطبيق الفئة "btn-danger" التي تغير لون الزر إلى اللون الأحمر ، ويضع رمز Font Awesome لزر الإعجاب داخل الزر. لاحظ أنه ستحتاج إلى إضافة مكتبة Font Awesome إلى موقعك لاستخدام رموزها.
  6. يمكن تحويل التواريخ بلغة PHP باستخدام دالة التحويل المدمجة في PHP والتي تسمى "date"، من خلال تحديد تنسيق التاريخ الذي يتم تحويله باستخدام الأحرف المحددة. لتحويل تاريخ ميلادي إلى تاريخ هجري، يمكن استخدام دالة "HijriDate" المدمجة في PHP. حيث يتم تمرير تاريخ الميلادي الذي يجب تحويله كوسيط، ويتم تحديد اليوم والشهر والسنة المناسبة للتاريخ الهجري المحول. يمكنك استخدام الكود التالي: // تاريخ ميلادي للتحويل $miladi_date = '2023-04-11'; // تحويل التاريخ الميلادي إلى هجري $hijri_date = date('d-m-Y', strtotime($miladi_date)); $hijri_date = HijriDate('d-m-Y', strtotime($miladi_date)); // طباعة التاريخ الهجري echo 'التاريخ الهجري: '.$hijri_date; ولتحويل تاريخ هجري إلى ميلادي، يمكن استخدام الدالة "HijriToJD" لتحويل التاريخ الهجري إلى عدد الأيام منذ التاريخ اليولياني الأول (1 يناير 4713 قبل الميلاد)، ومن ثم استخدام دالة "JDToGregorian" لتحويل عدد الأيام إلى تاريخ ميلادي. يمكنك استخدام الكود التالي: // تاريخ هجري للتحويل $hijri_date = '1444-08-01'; // تحويل التاريخ الهجري إلى ميلادي $hijri_jd = HijriToJD( explode('-', $hijri_date)[1], explode('-', $hijri_date)[2], explode('-', $hijri_date)[0]); $miladi_jd = $hijri_jd - 2400000.5; $miladi_date = JDToGregorian($miladi_jd); // طباعة التاريخ الميلادي echo 'التاريخ الميلادي: '.$miladi_date;
  7. قرار تحويل صفة نوع العقار إلى كينونة أخرى يعتمد على عدة عوامل، مثل نوع التطبيق ومتطلبات الأعمال المحددة للنظام الذي يستخدم هذه الجداول. على سبيل المثال، باستطاعتك استخدام جدول منفصل لتعريف أنواع العقارات، حيث يمكن تحديد مفتاح فريد لكل نوع عقار واستخدام هذا المفتاح في جدول العقارات بدلاً من صفة النوع. يمكن أيضًا توفير جدول منفصل للميزات المشتركة بين أنواع العقارات، مثل عدد الغرف أو المساحة، وتوصيلها بجدول العقارات باستخدام مفتاح خارجي. باختصار، تحويل صفة نوع العقار إلى كينونة أخرى يمكن أن يساعد في تحسين تنظيم وفهرسة البيانات وجعلها أكثر فعالية وسهولة في الإدارة.
  8. المشكلة تحديدًا في أن اسم المتغير my number = 6 غير صحيح في Python لأن الأسماء (variables) في Python لا يمكن أن تحتوي على مسافات. بدلاً من ذلك، يجب عليك استخدام _ أو camelCase لتجميل الكلمات في الأسماء. لذا، يمكنك تعديل الأمر إلى my_number = 6 لتخزين الرقم 6 في متغير my_number. إليك مثال آخر: myVariable = "Hello, world!" # اسم متغير صحيح يستخدم camelCase my_variable = "Hello, world!" # اسم متغير صحيح يستخدم snake_case my variable = "Hello, world!" # اسم متغير غير صحيح - يحتوي على مسافة وبالتأكيد أنت تتسائل: هل يمكنك كتابة اسم المتغير كالتالي: my-variable والإجابة هي لا يمكن استخدام علامة الشرطة المنخفضة (dash) في اسم المتغير في Python، لأن Python يفهمها كعلامة خاصة. لذلك استخدمنا شرطة سفلية (underscore) بدلاً من ذلك في اسم المتغير، مثل my_variable.
  9. هل تنوي العمل على مواقع أجنبية أو مع شركات أجنبية؟ إذا كان الأمر كذلك فنعم تعلم اللغة وإطار Ruby on rails الخاص بها. رغم أني لا أفضل تلك اللغة كلغة أولى لك فهى تضيق عليك مجال العمل كثيرًا ولكن لها مرتب مجزي بالطبع نظرًا لقلة المطورين المتوفرين للغة. وإذا كنت تريد العمل في السوق المحلي أو على مواقع العمل الحر مثل مستقل وخمسات، فعليك بتعلم التالي: HTML, CSS, JS بعد ذلك عليك بتعلم لغة خاصة بالواجهة الخلفية Back-End وما أنصحك به هو تعلم PHP ثم إطار لارافيل وأيضًا وورد بربس. وبخصوص إطار الواجهة الأمامية فأنصحك بتعلم VUE.JS في حال تعلمت إطار لارافيل وأيضًا هناك وظائق متاحة لها بالنسبة للمبتدأين وأيضًا أنصحك بتعلم إطار Angular.js إذا أردت التخصص في الواجهة الأمامية فقط ثم تعلم لغة Net. الخاصة بالواجهة الخلفية ويمكن استخدامها للواجهة الأمامية أيضًا وستجدها مطلوبة بكثرة مع إطار Angular.js في إعلانات الوظائف. ولا تشغل بالك بالمصطلحات أو أسماء الإطارات حاليًا فقط قم بتعلم الأساسيات وستتضح لك الصورة بشكل كبير. والأمر يتوقف على سنك أيضًا فإذا كان سنك صغيرة فقم بتعلم ما تريد عزيزي، أما إذا كنت تريد التعلم من أجل الحصول على وظيفة فيجب تعلم المهارات المطلوبة في سوق العمل. أنصحك بقراءة النقاشات التالية فقد تم الإجابة فيها على الكثير من الأسئلة. وأرشح لك البداية من خلال تعلم أساسيات الحاسوب وتوجد دورة خاصة بذلك في أكاديمية حسوب، وأيضًا دورة خاصة بلغة PHP وإطار لارافيل وورد بريس ويوجد عرض رمضان للحصول على دورتين بثمن دورة واحدة.
  10. ما تريده هو إضافة خاصية رفع الصور في تطبيقك Facebook clone بإستخدام تقنيات MERN و TypeScript. وهناك طرق عديدة لتنفيذ ذلك، فحاول إتباع التالي: قم بتثبيت وإعداد مكتبة multer لإدارة عملية تحميل الملفات. في ملف الخادم الخاص بك، قم بإضافة نقطة نهاية (end-point) لتلقي طلبات تحميل الملفات، وبإمكانك استخدام multer لتحديد المسار الذي سيتم تحميل الملفات إليه وتحديد اسم الملف. في الجزء الخاص بالعميل، قم بإنشاء نموذج لرفع الملفات باستخدام العنصر input الذي يسمح بتحديد نوع الملفات المسموحة وأقصى حجم للملفات. في المتحكم الخاص بالعميل، أنشئ دالة تعمل على إرسال طلب تحميل الملفات إلى نقطة النهاية التي قمت بإنشائها في السيرفر. بعد تحميل الملف، يمكنك حفظ معلومات الصورة في قاعدة البيانات الخاصة بك واستخدامها في العرض أو التحديث أو الحذف أو غيرها من الأنشطة. يمكنك استخدام cloudinary أو AWS S3 لتخزين الصور وتوفير الامكانية لتحميلها والوصول إليها. قد تحتاج إلى تحديد بعض الإعدادات في مكتبة multer وفقًا لما تحتاجه. مثال بسيط: 1- تثبيت وإعداد multer multer هي مكتبة Node.js تستخدم لإدارة عملية تحميل الملفات. npm install --save multer 2- ثم، في ملف server.js، يجب عليك استيراد multer وتهيئته حسب احتياجات تطبيقك. هنا مثال على ذلك: const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); // تعيين مسار الحفظ app.post('/upload', upload.single('file'), (req, res) => { // تنفيذ الإجراءات اللازمة لحفظ الملف }); تقوم multer في هذا المثال بإنشاء مجلد uploads/ ويحفظ الملفات التي تم تحميلها في هذا المجلد. ويتم تحميل الملفات باستخدام طريقة POST لنقطة النهاية /upload. يتم تحديد اسم الملف باستخدام الوسم name الذي يتم تمريره من العميل. 3- إضافة عنصر input لرفع الملفات في العميل في صفحة React الخاصة بك، يمكنك إضافة العنصر input لرفع الملفات كما هو موضح في الكود التالي: import React, { useState } from 'react'; function UploadForm() { const [file, setFile] = useState(null); const handleChange = (event) => { setFile(event.target.files[0]); }; const handleSubmit = (event) => { event.preventDefault(); const formData = new FormData(); formData.append('file', file); fetch('/upload', { method: 'POST', body: formData, }) .then((response) => response.json()) .then((data) => { console.log(data); }) .catch((error) => { console.error(error); }); }; return ( <form onSubmit={handleSubmit}> <input type="file" onChange={handleChange} /> <button type="submit">Upload</button> </form> ); } export default UploadForm; 4- عرض الصور المحملة في العميل يمكن استخدام URL.createObjectURL لتحويل الملف الذي تم تحميله إلى عنوان URL يمكن استخدامه لعرض الصورة في الصفحة. يمكنك تحديث حالة React الخاصة بالصورة المحملة وتمرير العنوان الجديد إلى عنصر img. يمكنك استخدام الكود التالي كمثال: import React, { useState } from 'react'; function UploadForm() { const [file, setFile] = useState(null); const [image, setImage] = useState(null); const handleChange = (event) => { setFile(event.target.files[0]); setImage(URL.createObjectURL(event.target.files[0])); }; const handleSubmit = (event) => { event.preventDefault(); const formData = new FormData(); formData.append('file', file); fetch('/upload', { method: 'POST', body: formData, }) .then((response) => response.json()) .then((data) => { console.log(data); }) .catch((error) => { console.error(error); }); }; return ( <div> <form onSubmit={handleSubmit}> <input type="file" onChange={handleChange} /> <button type="submit">Upload</button> </form> {image && ( <img src={image} alt="Uploaded image" style={{ maxWidth: '100%' }} /> )} </div> ); } export default UploadForm; وما يفعله الكود السابق هو تحديث حالة الصورة (image) عندما يتم تحديد ملف جديد. إذا تم تحميل الملف بنجاح، فسيظهر الصورة المحملة في الصفحة.
  11. Scrapy هو إطار عمل مفتوح المصدر (Open-source) مكتوب بلغة بايثون (Python) ويستخدم للحصول على بيانات من صفحات الويب واستخراجها بشكل تلقائي، ويتم استخدامه في تطوير تطبيقات ومشاريع الويب سكرابينغ والتنقيب عن البيانات (Web scraping and data mining). مثالًا بسيطًا يوضح كيفية استخدام إطار عمل Scrapy للحصول على عناصر محددة من صفحة الويب: لنفرض أننا نريد جمع عناوين الكتب الأكثر مبيعًا في موقع آمازون. يمكننا استخدام إطار عمل Scrapy لجلب عناوين الكتب عبر الخطوات التالية: 1- تثبيت إطار العمل Scrapy باستخدام الأمر التالي: pip install scrapy 2- إنشاء مشروع Scrapy جديد باستخدام الأمر التالي: scrapy startproject amazon_books 3- تعديل ملف amazon_books/spiders/spider.py الذي يمثل الملف الرئيسي للتحكم في عملية الحصول على البيانات، وإضافة الكود التالي لاستهداف صفحة الكتب الأكثر مبيعًا وجمع العناوين: import scrapy class AmazonBooksSpider(scrapy.Spider): name = "amazon_books" start_urls = [ 'https://www.amazon.com/gp/bestsellers/books/', ] def parse(self, response): for book_title in response.css('.p13n-sc-truncated'): yield {'title': book_title.css('::text').get()} 4- تشغيل مشروع Scrapy باستخدام الأمر التالي: scrapy crawl amazon_books سيعرض الأمر السابق عناوين الكتب الأكثر مبيعًا على موقع آمازون.
  12. من الجيد أنك قمت بالبحث واختيار Google Cloud لـ Object Storage ومكتبة Spatie لتحويل PDF إلى نص، هذا يعني أنك على الطريق الصحيح. 1- بالنسبة لتحليل ملفات PDF، أنت عثرت بالفعل على مكتبة Spatie. وفي PHP بإمكانك استخدام الدالة "text()" لتحويل الملف إلى نص، ثم يمكنك استخدام دالة "sentences()" لتقطيع النص إلى جمل. 2- وبالنسبة للجداول، يمكنك تسميتها بأي اسم تريده، ولكن من الأفضل أن تختار أسماء مناسبة وسهلة الفهم، مثل Files و Sentences. مثلاً، اسم جدول Files هو "pdf_files"، وذلك لأن هذا الجدول يحتوي على سجلات الملفات التي تم تحميلها، بينما يمكن أن يكون اسم جدول Sentences هو "pdf_sentences"، وذلك لأنه يحتوي على سجلات الجمل المستخرجة من الملفات. يمكن أيضاً استخدام أسماء تحوي على معنى مثل "uploaded_files" و "parsed_sentences". 3- لربط الـ Object Storage مع Laravel، يمكنك استخدام مكتبة Google Cloud Storage، وتثبيتها باستخدام Composer. 4- باستطاعتك استخدام وظيفة "upload()" لتحميل الملفات إلى Object Storage، ولإضافة سجل في قاعدة البيانات، وبإمكانك استخدام وظيفة "create()" في طراز البيانات الخاص بك. 5- لحفظ الجمل في جدول الجمل، تتوفر وظيفة "create()" أو "insert()" لإدخال كل جملة في قاعدة البيانات وربطها بملف PDF. 6- بالنسبة للبحث عن الكلمة المفتاحية في جميع الملفات، تتوفر وظيفة "where()" في Laravel للعثور على جميع الملفات التي تحتوي على الكلمة المفتاحية، ثم استخدم وظيفة "pluck()" لاسترداد معرفات الملفات فقط، ثم استخدام وظيفة "with()" لاسترداد جميع الجمل المرتبطة بكل ملف. ولا تنسى تأمين API الخاص بك باستخدام Basic Auth وإعداد اختبارات الوحدة للتأكد من أن جميع الوظائف تعمل بشكل صحيح.
  13. ما زال موجود بالفعل، وبخصوص العمل في الأكاديمية الأمر يتوقف على ما إذا كان هناك فرصة عمل متاحة في ذلك الوقت أم لا. وأريد أن أخبرك بشيئًا ما، لا تقلق إطلاقًا حول توافر فرص العمل، فإذا ما قمت بالتعلم والإجتهاد بالشكل الصحيح، فستجد فرصة عمل بلا شك. وكلٌ ميسر لما خلق له ورزقك مكتوب لا محالة، وما عليك إلا السعي والإجتهاد، فكثير من طلاب البرمجة يقلق حول إيجاد فرصة عمل بدلاً من أن يقلق حول إجتهاده في تعلم البرمجة وأنا حدثك بصراحة وواقعية. فإذا ما بحثت ستجد فرص العمل لكن هل لديك المهارات المطلوبة؟ عليك بتعلم المهارات المطلوبة في سوق العمل لديك أو على المواقع العمل الحر، وأيضًا بناء مشاريع حقيقية وواقعية وليست مجرد نماذج لوضعها في معرض الأعمال الخاص بك عند التقدم للوظائف. وأنصحك بقراءة النقاشات هنا، فستجد إجابات أنت بحاجة إليها بلا شك. وهناك أمرًا آخر، أرجو منك تغيير صورة الملف الشخصي فنحن في شهر رمضان وهذا لا يصح.
  14. يمكنك استخدام الخصائص التالية في CSS لتحقيق ذلك: padding-left: لتحريك الزر إلى اليسار. transition: لإضافة تحول سلس عندما يتم تحريك الزر. :hover: لتنفيذ التغييرات اللازمة عندما يتم تمرير المؤشر فوق الزر. وهناك العديد من الطرق المختلفة لتحقيق هذا التأثير ، ولكن إليك مثال بسيط لكيفية القيام بذلك: HTML: <button class="my-button">Submit</button> CSS: .my-button { padding-left: 0; /* تحريك الزر إلى اليسار */ transition: all 0.3s ease; /* إضافة تحول سلس عند تحريك الزر */ } .my-button:hover { padding-left: -10px; /* تحريك الزر إلى اليسار بشكل أكبر عندما يتم تمرير المؤشر فوقه */ } تستطيع تغيير قيم ال padding-left لتتناسب مع تصميمك، وكذلك الاستفادة من خصائص أخرى في CSS لتحقيق التأثير المطلوب، كالتالي: 1- margin-left: بدلاً من استخدام padding-left يمكن استخدام margin-left لتحريك الزر إلى اليسار. .my-button { margin-left: 0; transition: all 0.3s ease; } .my-button:hover { margin-left: -10px; } 2- transform: يمكن استخدام خاصية transform مع translateX لتحريك العنصر إلى اليسار. .my-button { transform: translateX(0); transition: all 0.3s ease; } .my-button:hover { transform: translateX(-10px); } 3- left و position: يمكن استخدام خاصيتي left و position لتحريك العنصر في مكانه. .my-button { position: relative; left: 0; transition: all 0.3s ease; } .my-button:hover { left: -10px; }
  15. المشكلة تكمن في CSRF token، حيث يستخدم Laravel هذا النظام لمنع هجمات Cross-Site Request Forgery، ويجب عليك تضمين هذا الرمز في طلب POST الخاص بك، ولكنه غير موجود في الطلب الحالي، ما يعني أنه يجب إضافة الرمز بالطريقة التالية: 1- استدعاء طريقة Laravel csrf_token() في تطبيق Laravel الخاص بك، وتلك الطريقة تقوم بإرجاع رمز CSRF الحالي كنص: <?php $token = csrf_token(); ?> 2- ثم ، يمكنك إضافة هذا الرمز كحقل مخفي في نموذج React الخاص بك: <input type="hidden" name="_token" value="{{ $token }}"> 3- أخيرًا ، يجب عليك تضمين الرمز في رأس الطلب الخاص بك في React: headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }
  16. في حال قام الشخص الأول قد دفع 88512 والشخص الثاني قد دفع 121105، فإن مجموع المبلغ الذي تم جمعه هو 88512 + 121105 = 209617. وإذا تم توزيع مبلغ 26000 من الأرباح، فسيتم توزيع هذا المبلغ بنسبة الاشتراك الأصلي لكل شخص. مما يعني لحساب نسبة كل شخص، يجب جمع إجمالي المبلغ الذي دفعه الشخص الأول والشخص الثاني، ثم حساب نسبة كل شخص من هذا المجموع. لذلك: نسبة الشخص الأول = (88512 / 209617) * 100% = 42.24% نسبة الشخص الثاني = (121105 / 209617) * 100% = 57.76% ثم يمكن حساب المبلغ الذي يجب توزيعه على كل شخص بناءً على نسبته في المجموع الكلي، وذلك باستخدام العلاقة: أرباح الشخص الأول = 26000 * 42.24% = 10994.4 أرباح الشخص الثاني = 26000 * 57.76% = 15005.6 وبالتالي، يجب توزيع مبلغ 10994.4 على الشخص الأول ومبلغ 15005.6 على الشخص الثاني.
  17. معنى Full-stack أنك أصحبت قادر على تنفيذ مشروع كامل بمفردك وذلك فيما يتعلق بالواجهة الأمامية والخلفية. وفي دورة تطوير واجهات المستخدم تعلمت ما يلي: مفهوم الواجهة الأماميّة للموقع front-end وكيفية عملها. أساسيات لغات تطوير واجهات المستخدم: HTML, CSS, JavaScript. استخدام أحدث أدوات التطوير: Bootstrap, jQuery, Sass, Gulp. التعامل مع خدمة استضافة المشاريع GitHub. وفي دورة PHP أنت تعلمت ما يلي: الأسس البرمجية السليمة عبر لغة PHP كيف يتم التخاطب بين المتصفح والخادم أساسيات قواعد البيانات كيفية بناء تطبيق ويب لإدارة المهام باستخدام لغة PHP أساسيات التطوير باستخدام معمارية MVC أساسيات إطار العمل Laravel بناء تطبيق إدارة المهام باستخدام إطار العمل Laravel تطوير واجهة برمجية API بالإعتماد علي نمط RESTful تطوير موقع إعلانات مبوبة شبكة اجتماعية تشبه Instagram تطوير نظام إدارة محتوى CMS كامل من الصفر باستخدام إطار العمل Laravel تطوير قوالب WordPress وبذلك أنت قمت بالجمع ما بين مهارات مطور الواجهة الأمامية Front-End ومطور الواجهة الخلفية Back-End. ولكن ما يقصك هو تعلم إطار للواجهة الأمامية وأنصحك بشدة بتعلم Vue.js لكونه سهل ومتوافق مع إطار لارافيل. وأنصحك أيضًا بقراءة النقاش على السؤال التالي منعًا للتكرار ففيه إجابات مفيدة بالنسبة لسؤالك. ما هو MERN Stack ؟
  18. بالطبع بايثون قادرة على سحب البيانات من مواقع التواصل الاجتماعي مثل إنستغرام وفيسبوك فنقطة قوتها تكمن في جمع البيانات وتحليلها. مكتبات سحب وتحليل البيانات من جميع المواقع باستخدام بايثون BeautifulSoup هذه المكتبة تستخدم لتحليل محتوى صفحات الويب واستخراج البيانات المطلوبة. Requests تستخدم لإجراء طلبات HTTP والتعامل مع الردود. Selenium المكتبة تستخدم للتحكم في المتصفح وتنفيذ العمليات مثل تعبئة نماذج والتنقل بين الصفحات. المكتبات المتخصصة في سحب البيانات من مواقع التواصل الاجتماعي Tweepy تستخدم للتعامل مع Twitter API، والتحكم في الحسابات والتغريدات والمتابعين والبحث عن الهاشتاجات والكلمات المفتاحية. Instaloader تستخدم لاستخراج الصور والفيديوهات والبيانات الأخرى من حسابات Instagram. Facebook Graph API تستخدم هذه المكتبة للتعامل مع Facebook API واستخراج البيانات من الصفحات والمجموعات والأحداث والإعلانات. PyAutoGUI تسمح لك بتنفيذ أوامر التحكم بالفأرة ولوحة المفاتيح، مما يمكنك من إجراء أي نوع من العمليات الأوتوماتيكية مثل الإعجاب بالمنشورات أو إرسال رسائل تلقائياً. إرسال رسائل تسويقية باستخدام بايثون هناك بعض الخيارات المتاحة، مثل: تطبيقات الرسائل النصية القصيرة (SMS) يمكن استخدام APIs لخدمات الرسائل النصية لإرسال رسائل تسويقية جماعية. البريد الإلكتروني باستطاعتك استخدام مكتبات Python لإرسال رسائل بريد إلكتروني جماعية. تطبيقات التواصل الاجتماعي باستخدام APIs لتطبيقات التواصل الاجتماعي مثل تليجرام وإنستغرام لإرسال رسائل جماعية أو إجراء منشن، ولكن يجب مراعاة سياسات الخدمة الخاصة بكل تطبيق. مكتبات متخصصة في إرسال رسائل تسويقية وجماعية Twilio تستخدم هذه المكتبة للتحكم في خدمات الرسائل النصية والصوتية، وإرسال رسائل تسويقية جماعية. Pyrogram تستخدم للتعامل مع برمجة تليغرام API، والتحكم في الحسابات والرسائل والمجموعات والقنوات. Telethon تستخدم للتحكم في Telegram API، وتسمح لك بإرسال الرسائل وإنشاء المجموعات وتعديل الحسابات وتنفيذ عمليات البحث. Instapy تستخدم لتحكم في Instagram API، والتعامل مع الحسابات والمتابعين والمنشورات وعمليات الـ Mention. Instagram-API-python تستخدم للتعامل مع Instagram Private API، وتمكنك من التعامل مع الحسابات والمتابعين والمنشورات والتعليقات وعمليات الـ Mention.
  19. يحتوي المخطط على ثلاثة جداول: جدول العقارات (Properties) ويحتوي على معلومات عن العقارات مثل العنوان والمساحة والسعر والصور والتفاصيل الأخرى. جدول المستخدمين (Users) ويحتوي على معلومات المستخدمين مثل الاسم والبريد الإلكتروني وكلمة المرور. جدول المفضلة (Favorites) وهو جدول يربط بين جدول العقارات وجدول المستخدمين، حيث يمكن للمستخدمين حفظ العقارات في قائمة المفضلة لديهم. يحتوي جدول المفضلة على معلومات العلاقة بين المستخدمين والعقارات، حيث يربط الجدول بين معرفات العقارات ومعرفات المستخدمين الذين حفظوا العقارات في قوائمهم المفضلة. ويظهر المخطط علاقة many-to-many بين جدولي العقارات والمفضلة، وأيضًا علاقة one-to-many بين جدولي المستخدمين والمفضلة، حيث يمكن لعدة مستخدمين حفظ نفس العقار في قوائم مفضلتهم.
  20. 1- الطريقة الأولى هي استخدام background-image لعنصر الـCSS. تتميز تلك الطريقة بسهولة استخدامها، حيث يمكن استخدام الصور كخلفية لعناصر HTML بدلاً من استخدام <img>. على سبيل المثال، يمكن إنشاء الشيفرة البرمجية التالية: .myImg { background-image: url("my-image.png"); background-size: cover; } 2- الطريقة الثانية هي استخدام خاصية object-fit لعنصر <img>. وتتيح لك تلك الخاصية تحديد نوع محدد من تكبير أو تصغير الصورة داخل إطار الصورة. يمكن إنشاء الشيفرة البرمجية التالية: .myImg { object-fit: cover; width: 320px; height: 180px; } 3- الطريقة الثالثة إنشاء عنصر صورة بكامل الشاشة داخل حاوية. بالشكل التالي: .wrapper { position: relative; padding-top: 56.25%; /* 16:9 Aspect Ratio */ } img { position: absolute; left: 0; top: 0; width: 100%; height: auto; } 4- الطريقة الرابعة هي الطريقة البسيطة حيث تعد هذه الطريقة هي الطريقة الأكثر استخدامًا، من خلال ضبط عرض الصورة بسهولة باستخدام خاصية العرض، كالتالي: img { height: auto; width: 100%; /* تحكم أكبر من خلال max-width */ max-width: 720px; } 5- الطريقة الخامسة هي الطريقة المتقدمة. وتستخدم تلك الطريقة علامة <picture> والخاصية srcset، حيث يمكن تغيير مصدر الصورة بناءً على عرض الصفحة في المتصفحات الحديثة. وتستطيع استخدامها لتحميل صور أصغر على الأجهزة المحمولة والهواتف الذكية لتحسين وقت التحميل والأداء. تستخدم علامة <picture> لتعريف مجموعة من المصادر للصورة واستخدام خاصية srcset لتعريف نسخ مختلفة من الصور المناسبة لأحجام الشاشة المختلفة. ويمكن أيضاً استخدام الخاصية media لتحديد شروط معينة لتحميل الصور، وباستطاعتك استخدام العنصر <img> داخل عنصر <picture> لتحديد الصورة الافتراضية. الكود التالي يوضح استخدام عنصر <picture> مع الخاصية srcset: <picture> <source media="(max-width: 799px)" srcset="elva-480w.jpg"> <source media="(min-width: 800px)" srcset="elva-800w.jpg"> <img src="elva-800w.jpg"> </picture> في المثال، تم تحديد مصادر مختلفة للصورة باستخدام الخاصية srcset حسب عرض الشاشة. وعند تحميل الصفحة على الأجهزة التي يكون عرض الشاشة أقل من 800 بكسل، سيتم تحميل الصورة elva-480w.jpg ، بينما على الأجهزة التي يكون عرض الشاشة أكبر من 800 بكسل، سيتم تحميل الصورة elva-800w.jpg. وإذا لم تتوفر صور ملائمة للشاشة، سيتم استخدام الصورة الافتراضية الموجودة في العنصر <img>.
  21. باستطاعتك استخدام خاصية CSS "display" وتعيينها على "none" لإخفاء العنصر، ويمكن إظهاره مرة أخرى عن طريق تعيين "display" على "block" أو "inline" أو أي قيمة أخرى تناسب حاجتك. 1- ابحث عن العنصر الذي يحتوي على مقطع الصوتي في صفحة HTML، وقم بإضافة معرف فريد لهذا العنصر باستخدام الخاصية "id". على سبيل المثال، يمكنك تعيين معرف "audio-player" لعنصر مشغل الصوتيات. <audio id="audio-player" src="audio-file.mp3"></audio> 2- ثم، في CSS، يمكنك استخدام الخاصية "display" وتعيينها على "none" لإخفاء العنصر بحيث لا يظهر في الصفحة، ويمكنك استخدام المعرف الذي قمت بتعيينه في الخطوة الأولى. #audio-player { display: none; } 3- يمكنك أيضًا استخدام JavaScript للتحكم في عرض وإخفاء مقطع الصوتي. يمكن استخدام الدالة getElementById() للحصول على عنصر مقطع الصوتي وتعيين خاصية "display" على "none" لإخفاء العنصر، وتعيينها على "block" لإظهاره مرة أخرى. const audioPlayer = document.getElementById("audio-player"); audioPlayer.style.display = "none"; // to hide the audio player audioPlayer.style.display = "block"; // to show the audio player وبخصوص تشغيل مقطع الصوتي تلقائيًا عند زيارة الموقع باستخدام خاصية "autoplay" في عنصر الصوت <audio> في HTML، يجب مراعاة أنه في بعض المتصفحات سيتم حجب التشغيل التلقائي لمقاطع الصوت والفيديوات عند زيارة الصفحة، ويجب على المستخدم النقر على زر تشغيل للبدء في الاستماع. ولإضافة خاصية "autoplay"، يمكن تعيينها على العنصر <audio> في الصفحة HTML عن طريق إضافة الكلمة المفتاحية "autoplay" بمفردها كما يلي: <audio id="audio-player" src="audio-file.mp3" autoplay></audio> والمتصفحات التي تحجب التشغيل التلقائي: جوجل كروم (Google Chrome)، ابتداءً من إصدار 66 متصفح فايرفوكس (Firefox)، ابتداءً من إصدار 66 متصفح سفاري (Safari)، ابتداءً من إصدار 11 متصفح إيدج (Microsoft Edge)، ابتداءً من إصدار 17
  22. 1- كتابة اسم المتغير داخل علامتي المساواة (=)، ويجب أن يتم تحديد نوع القيمة التي سيتم تخزينها في المتغير. في المثال التالي، سنقوم بتخزين قيمة نصية (string)، لذلك يتم استخدام علامة التنصيص الفردي (') أو الزوجي (") حول النص. shaimaa = 'Hello, Shaimaa!' 2- بعد تعريف المتغير، يمكن طباعة قيمته باستخدام الدالة print(). يتم وضع اسم المتغير داخل علامتي القوسين (). print(shaimaa) هناك طرق أخرى لكتابة المتغير وطباعته في بايثون، ومنها: 1- تعريف المتغير وطباعته في سطر واحد: shaimaa = 'Hello, Shaimaa!'; print(shaimaa) 2- استخدام دالة format() لإدراج قيمة المتغير داخل نص: shaimaa = 'Shaimaa' print('Hello, {}!'.format(shaimaa)) 3- استخدام العلامات المنسقة (f-strings)، وهي طريقة جديدة متوفرة في Python 3.6 والإصدارات الأحدث: shaimaa = 'Shaimaa' print(f'Hello, {shaimaa}!')
  23. حاول كتابة console.log لقيمة user_name و Email في الشروط المتعلقة بالتحقق من الاسم والبريد الإلكتروني، وتأكد من أن الشروط تنطبق على القيم المتوفرة في قاعدة البيانات. كما يمكنك استخدام debugger أو console.log لتتبع مسار التنفيذ في حالة عدم الوصول إلى النتيجة المتوقعة.
  24. من الممكن تنفيذ ذلك من خلال تحديد مسار الملف الصوتي المستلم من خلال الطلب السابق باستخدام Flask.send_file. واستخدام مواقع مثل Quran.com للبحث عن المقاطع الصوتية المطلوبة من القرآن الكريم. مثال بسيط: from flask import Flask, request, send_file import requests app = Flask(__name__) @app.route('/') def index(): return '<h1>Text-to-Speech App</h1>' @app.route('/text-to-speech', methods=['POST']) def text_to_speech(): # get text from request text = request.form['text'] # set up API request url = 'https://texttospeech.googleapis.com/v1/text:synthesize?key=YOUR_API_KEY' headers = {'Content-Type': 'application/json'} data = { 'input': {'text': text}, 'voice': {'languageCode': 'en-US', 'name': 'en-US-Wavenet-D'}, 'audioConfig': {'audioEncoding': 'MP3'} } # make API request response = requests.post(url, headers=headers, json=data) # save audio file with open('output.mp3', 'wb') as f: f.write(response.content) # send audio file to client return send_file('output.mp3', as_attachment=True) @app.route('/quran-recitation', methods=['POST']) def quran_recitation(): # get surah and reciter from request surah = request.form['surah'] reciter = request.form['reciter'] # search for audio file on Quran.com url = f'https://quran.com/{surah}/{reciter}/' response = requests.get(url) # extract audio file url from response audio_url = 'https:' + response.text.split('src="')[-1].split('"')[0] # download audio file response = requests.get(audio_url) # save audio file with open('quran_recitation.mp3', 'wb') as f: f.write(response.content) # send audio file to client return send_file('quran_recitation.mp3', as_attachment=True) if __name__ == '__main__': app.run() في المثال، تم إضافة مسار جديد '/quran-recitation' يقوم بالبحث عن المقطع الصوتي المطلوب عبر موقع Quran.com، ويمكن تحديد رقم السورة واسم القارئ عبر الطلب.
  25. يمكن استخدام واجهة Flask لإنشاء تطبيق ويب بسيط يمكنه استخدام وظيفة التحدث إلى النص (Text-to-Speech) لتحويل النص إلى صوت وجلب الملف الصوتي المولد. واستخدام واجهة البرمجة الخاصة بخدمة تحويل النص إلى كلام مثل Google Text-to-Speech أو IBM Watson Text-to-Speech للقيام بذلك. والخطوات الأساسية لإنشاء التطبيق هي: 1- تثبيت Flask وأي مكتبات أخرى ذات الصلة (مثل requests). pip install flask pip install requests 2- إنشاء ملف تطبيق Flask وتعريف المسارات والدوال اللازمة. يمكن إضافة مسار الصفحة الرئيسية ومسارات أخرى لتشغيل وظائف معينة. 3- استخدام دالة Flask.request لالتقاط النص المدخل من المستخدم. 4- استخدام وظيفة requests.post لإرسال النص المدخل إلى خدمة تحويل النص إلى كلام (Text-to-Speech) والحصول على الملف الصوتي المولد. 5- تحويل الملف الصوتي المستلم إلى تنسيق يمكن تشغيله في المتصفح، مثل تنسيق MP3. 6- إرسال الملف الصوتي إلى العميل (المتصفح) باستخدام Flask.send_file. 7- تحديد الصيغة المناسبة لملف الصوتي لتشغيله في متصفح الويب (مثل HTML5 audio). و استخدم الكود التالي كنموذج لإنشاء التطبيق: from flask import Flask, request, send_file import requests app = Flask(__name__) @app.route('/') def index(): return '<h1>Text-to-Speech App</h1>' @app.route('/text-to-speech', methods=['POST']) def text_to_speech(): # get text from request text = request.form['text'] # set up API request url = 'https://texttospeech.googleapis.com/v1/text:synthesize?key=YOUR_API_KEY' headers = {'Content-Type': 'application/json'} data = { 'input': {'text': text}, 'voice': {'languageCode': 'en-US', 'name': 'en-US-Wavenet-D'}, 'audioConfig': {'audioEncoding': 'MP3'} } # make API request response = requests.post(url, headers=headers, json=data) # save
×
×
  • أضف...