-
المساهمات
14490 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
384
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
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 سيعرض الأمر السابق عناوين الكتب الأكثر مبيعًا على موقع آمازون.
-
من الجيد أنك قمت بالبحث واختيار 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 وإعداد اختبارات الوحدة للتأكد من أن جميع الوظائف تعمل بشكل صحيح.
-
ما زال موجود بالفعل، وبخصوص العمل في الأكاديمية الأمر يتوقف على ما إذا كان هناك فرصة عمل متاحة في ذلك الوقت أم لا. وأريد أن أخبرك بشيئًا ما، لا تقلق إطلاقًا حول توافر فرص العمل، فإذا ما قمت بالتعلم والإجتهاد بالشكل الصحيح، فستجد فرصة عمل بلا شك. وكلٌ ميسر لما خلق له ورزقك مكتوب لا محالة، وما عليك إلا السعي والإجتهاد، فكثير من طلاب البرمجة يقلق حول إيجاد فرصة عمل بدلاً من أن يقلق حول إجتهاده في تعلم البرمجة وأنا حدثك بصراحة وواقعية. فإذا ما بحثت ستجد فرص العمل لكن هل لديك المهارات المطلوبة؟ عليك بتعلم المهارات المطلوبة في سوق العمل لديك أو على المواقع العمل الحر، وأيضًا بناء مشاريع حقيقية وواقعية وليست مجرد نماذج لوضعها في معرض الأعمال الخاص بك عند التقدم للوظائف. وأنصحك بقراءة النقاشات هنا، فستجد إجابات أنت بحاجة إليها بلا شك. وهناك أمرًا آخر، أرجو منك تغيير صورة الملف الشخصي فنحن في شهر رمضان وهذا لا يصح.
-
يمكنك استخدام الخصائص التالية في 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; }
-
المشكلة تكمن في 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') }
-
في حال قام الشخص الأول قد دفع 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 على الشخص الثاني.
- 12 اجابة
-
- 1
-
-
معنى 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 ؟
-
بالطبع بايثون قادرة على سحب البيانات من مواقع التواصل الاجتماعي مثل إنستغرام وفيسبوك فنقطة قوتها تكمن في جمع البيانات وتحليلها. مكتبات سحب وتحليل البيانات من جميع المواقع باستخدام بايثون 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.
- 3 اجابة
-
- 1
-
-
يحتوي المخطط على ثلاثة جداول: جدول العقارات (Properties) ويحتوي على معلومات عن العقارات مثل العنوان والمساحة والسعر والصور والتفاصيل الأخرى. جدول المستخدمين (Users) ويحتوي على معلومات المستخدمين مثل الاسم والبريد الإلكتروني وكلمة المرور. جدول المفضلة (Favorites) وهو جدول يربط بين جدول العقارات وجدول المستخدمين، حيث يمكن للمستخدمين حفظ العقارات في قائمة المفضلة لديهم. يحتوي جدول المفضلة على معلومات العلاقة بين المستخدمين والعقارات، حيث يربط الجدول بين معرفات العقارات ومعرفات المستخدمين الذين حفظوا العقارات في قوائمهم المفضلة. ويظهر المخطط علاقة many-to-many بين جدولي العقارات والمفضلة، وأيضًا علاقة one-to-many بين جدولي المستخدمين والمفضلة، حيث يمكن لعدة مستخدمين حفظ نفس العقار في قوائم مفضلتهم.
- 7 اجابة
-
- 1
-
-
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>.
-
باستطاعتك استخدام خاصية 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
-
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}!')
-
من الممكن تنفيذ ذلك من خلال تحديد مسار الملف الصوتي المستلم من خلال الطلب السابق باستخدام 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، ويمكن تحديد رقم السورة واسم القارئ عبر الطلب.
-
يمكن استخدام واجهة 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
-
الأسئلة الخاصة بالإختبارات أو المشاريع لا يتم توفير إجابة لها ولكن يمكن شرح طريقة الحل وإرشادك للخطوات. ويتطلب السؤال كتابة برنامج يقبل 3 إدخالات، الأولى منها حرف يمثل عملية حسابية، والإدخالين الآخرين هما عددين صحيحين. يتم تحديد العملية الحسابية المطلوبة استنادًا إلى الحرف المدخل، وتشمل العمليات الحسابية الخمسة التالية ورموزها: الجمع: + الطرح: - الضرب: * القسمة: / باقي القسمة: % وحسب الحرف المدخل، يجب تنفيذ العملية المناسبة على العددين المدخلين. يضمن السؤال أن العدد الثاني لن يكون أبدًا صفرًا في حالة القسمة وباقي القسمة. إذا كان الحرف أي رمز آخر غير الرموز المذكورة، يجب على البرنامج إخراج "Invalid operator" بين علامتي اقتباس. على سبيل المثال، إذا كان المدخل هو + 1 31، سيكون الإخراج 32، وإذا كان المدخل هو * 12 12، سيكون الإخراج 144. ةيمكن حل السؤال باستخدام لغة C عن طريق إتباع الخطوات التالية: 1- تعريف المتغيرات التي سيتم استخدامها في البرنامج، وهي: متغير من نوع char لتخزين العملية الحسابية المدخلة متغيران من نوع int لتخزين العددين المدخلين متغير من نوع int لتخزين نتيجة العملية الحسابية 2- استخدام دالة scanf لاستلام الإدخالات من المستخدم وتخزينها في المتغيرات المناسبة. 3-استخدام جملة switch-case للتحقق من قيمة المتغير الحرفي المدخل وتنفيذ العملية الحسابية المناسبة بناءً على القيمة المدخلة. يمكن استخدام الخيار الافتراضي لإخراج رسالة خطأ إذا كانت العملية الحسابية المدخلة غير صحيحة. 4- إخراج النتيجة عن طريق استخدام دالة printf. 5- إعادة قيمة 0 في نهاية البرنامج للإشارة إلى نجاح تنفيذ البرنامج. وستجد هنا مقالات ودروس حول لغة C
- 1 جواب
-
- 1
-
-
المشكلة تتعلق بفشل إنشاء keystore للتوقيع في تطبيق أندرويد، من المهم التأكد من أن كلمة المرور واسم الأمان لل keystore صحيحين وأن لديك الأذونات اللازمة لإنشاء ملف keystore. هناك بعض الحلول التي يمكن تجربتها: 1- تأكد من أن JDK مثبت على جهاز الكمبيوتر الخاص بك وأنه يعمل بشكل صحيح. يمكنك التأكد من ذلك عن طريق فتح موجه الأوامر وكتابة الأمر التالي: java -version إذا كانت النسخة تظهر بشكل صحيح، فهذا يعني أن JDK يعمل بشكل صحيح. 2- تأكد من أن مسار ال keystore صحيح وأن الملف غير موجود مسبقاً في هذا المسار. 3- يمكنك محاولة إعادة إنشاء keystore مرة أخرى باستخدام الأمر التالي: #أو مايتوفر لديك لتنفيذ الأوامر التالية cmd إستخدم #بإسم المستخدم في جهازك عند تنفيذك الأمر التالي <USER_NAME> إستبدل cd /Users/<USER_NAME>/.android/ # نفذ أمر الحذف التالي rm -rf debug.keystore # الأن نقوم بتوليد مفتاح جديد بتنفيذ الأمر التالي keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "C=US, O=Android, CN=Android Debug #في المشروع ونفذ الأمر التالي app جديد أو مايتوفر لديك في مسار cmd بعد تنفيذ الأمر بنجاح إفتح ./gradlew build #مباشرة من اندروبد ستوديو والإستغناء عن تنفيذ الامر السابق build يمكنك أيضاُ عمل لاعمل ويرجى استبدال "my-release-key.keystore" و "alias_name" بمعلومات التوقيع الخاصة بك. 4- قد يحدث الخطأ إذا كان هناك ملف آخر بنفس الاسم موجود في نفس المجلد، لذلك يمكن تغيير اسم الملف المراد إنشاؤه ومحاولة إنشاء ملف keystore جديد. إذا لم تنجح الحلول السابقة في حل المشكلة، فيجب عليك التحقق من ملفات السجل (Log Files) والبحث عن أي رسائل أخطاء (Error Messages) تفيد بوجود مشكلة أخرى. وهناك حلول أخرى تم ذكرها في النقاشات التالية.
-
صحيح، ينبغي أن يتم إرجاع رسالة خطأ تشير إلى أن المستخدم موجود مسبقًا عند محاولة تسجيل مستخدم جديد باسم مستخدم مكرر أو عنوان بريد إلكتروني مكرر، وهذا يمكن تحقيقه عن طريق التحقق من وجود المستخدم في قاعدة البيانات باستخدام الدالة findOne وإرجاع رسالة الخطأ بناءً على ذلك. ومن الممكن أيضاً أن يكون هناك خطأ في تسجيل المستخدم الأول، ويمكن التحقق من ذلك عن طريق إدخال مستخدم جديد يختلف في اسم المستخدم وعنوان البريد الإلكتروني وتحديد ما إذا كان يتم إضافته بنجاح إلى قاعدة البيانات. وبالنسبة لتخصيص أسماء الحقول في الكائن المسند لنموذج User، فقد يكون هذا ضروريًا إذا كانت أسماء الحقول في النموذج مختلفة عن أسماء الحقول في قاعدة البيانات، وباستطاعتك تحقيق ذلك باستخدام خاصية toObject في النموذج لتحويل الكائن إلى كائن قابل للتخزين في قاعدة البيانات.
-
1- تأكد من أن الحقل الذي يحتوي على مسار الصور في قاعدة البيانات يحتوي على المسار الصحيح للصورة. 2- في النموذج الذي تريد استخدامه لاسترداد الصور ، قم بإضافة الحقل الذي يحتوي على مسار الصور إلى الخاصية الحماية fillable، مثلا، إذا كان اسم الحقل هو "image_path"، يمكنك إضافته كالتالي: protected $fillable = ['image_path']; 3- في العرض ، يمكنك استخدام المسار المخزن في الحقل لعرض الصورة. يمكنك استخدام الدالة asset() للوصول إلى الملف. على سبيل المثال، يمكنك استخدام الكود التالي لعرض الصورة: <img src="{{ asset($event->image_path) }}" alt="Event Image"> في المثال، يتم عرض صورة الحدث المخزنة في حقل الصورة في قاعدة البيانات باستخدام الدالة asset() في Laravel. وبهذه الطريقة، يمكنك استيراد الصور من قاعدة البيانات MySQL باستخدام Laravel وعرضها في موقع الويب الخاص بك. والحل الذي قدمته لك والحل الذي قدمه لك عدنان، يقدمان حلولًا مختلفة لنفس المشكلة ولكن بأساليب مختلفة. إجابة عدنان تشير إلى أنه يتعين عليك أولاً التأكد من أن الحقل الذي يحتوي على مسار الصور في قاعدة البيانات يحتوي على المسار الصحيح للصورة. بعد ذلك، يمكنك استخدام الدالة asset() في Laravel لإنشاء رابط كامل للصورة. أما الإجابة الخاصة بي، فتقدم حلاً يتضمن إضافة الحقل الذي يحتوي على مسار الصور إلى الخاصية الحماية fillable في نموذج Laravel الخاص بك. هذا الإجراء يساعد على حماية نموذجك من أي هجمات قد تتعرض لها. أيضًا كودًا يمكن استخدامه لعرض الصورة المخزنة في حقل الصورة في قاعدة البيانات باستخدام الدالة asset() في Laravel. وعامةً، الفرق الرئيسي بين الإجابتين هو أن الإجابة الأولى لا تشير إلى إضافة الحقل الذي يحتوي على مسار الصور إلى الخاصية الحماية fillable في نموذج Laravel الخاص بك، في حين أن الإجابة الخاصة بي تشير إلى هذا الإجراء.
-
لإنشاء دالة تنشر محتوى في إطار عمل Laravel ، يمكنك اتباع هذه الخطوات: 1- إنشاء متحكم للتعامل مع المنطق لنشر المحتوى. 2- داخل المتحكم ، قم بإنشاء دالة تأخذ بيانات المحتوى (مثل العنوان ، الوصف ، الصورة ، إلخ) وتحفظها في قاعدة البيانات. 3- إضافة حقل "أولوية" إلى جدول الأحداث في قاعدة البيانات باستخدام نوع البيانات "integer"، حيث سيتم استخدام هذا الحقل لتحديد الترتيب الذي يتم عرض الأحداث به على الموقع. 4- في الدالة ، ضع أولوية الحدث بناءً على الشروط المطلوبة. على سبيل المثال ، ويمكنك تعيين أولوية أعلى لحدث ما إذا كان مهمًا أو عاجلاً. 5- استخدام طريقة "orderBy" في Laravel لفرز الأحداث بناءً على أولوياتها عند عرضها على الموقع، ويمكنك القيام بذلك عن طريق إضافة الكود التالي إلى المتحكم الخاص بك: $events = Event::orderBy('priority', 'desc')->get(); وسيتم ذلك بترتيب الأحداث بترتيب تنازلي حسب الأولوية ، حيث سيتم عرض الحدث ذو الأولوية الأعلى أولاً. 6- استخدام الطريقة "first" في Laravel لاسترداد الحدث ذو الأولوية الأعلى ، على النحو التالي: $firstEvent = Event::orderBy('priority', 'desc')->first(); وسيتم ذلك بإرجاع الحدث ذو الأولوية الأعلى ، الذي يمكن عرضه بشكل بارز على الموقع. 7- أخيراً ، استخدم حلقة "foreach" لعرض الأحداث الأخرى على الموقع، وباستطاعتك استخدام حلقة "foreach" لتحقيق ذلك. @foreach($events as $event) <!-- display event --> @endforeach
-
يتم توجيه المستخدم إلى الرابط الخارجي بعد النقر مرتين لأنه يتم استخدام الحالة الجديدة "validMessage" التي تعيد قيمة "true" عندما يكون لا يوجد أي رسائل خطأ في التحقق من الصحة. وبعد ذلك، يتم تأجيل فتح الرابط الخارجي لمدة 1.5 ثانية باستخدام setTimeout(). بالتالي، عند النقر على زر الإرسال، يتم التحقق من صحة البيانات المدخلة في الحقول، وإذا كانت جميع الحقول صالحة، يتم تعيين القيمة "true" لـ validMessage، ويتم فتح الرابط الخارجي بعد مرور 1.5 ثانية. إذا لم يكن هناك أي رسائل خطأ وتم النقر مرة أخرى، سيتم توجيه المستخدم مرة أخرى إلى الرابط الخارجي. يمكن تعديل الكود لتوجيه المستخدم مباشرةً إلى الرابط الخارجي عند النقر على زر الإرسال في حالة كانت جميع الحقول صالحة، دون الحاجة إلى النقر مرتين. يمكن فعل ذلك بتحرير الدالة handleClick كما يلي: const handleClick = (e) => { e.preventDefault(); formValidation() if (validate.length === 0) { window.open("https://github.com/Saadaoui-Forkan/react-forms/tree/main/responsive_form", '_self'); } } تم تعديل الشرط في الدالة handleClick من if (validMessage) إلى if (validate.length === 0) ، حيث تم استخدام المتغير validate الذي يحتوي على الأخطاء المحتملة المكتشفة من قبل formValidation. وعلاوة على ذلك، تم تحرير setTimeout() من الكود حيث لم يعد هناك حاجة لهذا المؤخر الزمني. وبمجرد تحقق صحة الحقول وعدم وجود رسائل خطأ في المتغير validate، سيتم توجيه المستخدم مباشرة إلى الرابط الخارجي. في حالة كان هناك أي رسائل خطأ، لن يتم توجيه المستخدم إلى الرابط الخارجي.
- 3 اجابة
-
- 1
-
-
أهلا بك حسن، قد تم الإجابة على سؤال مماثل لسؤالك في النقاشات التالية، أرجو الإطلاع عليها منعًا للتكرار. والأمر يتوقف على عدة عوامل ولا يوجد نصيحة عامة، فمثلآ كم عمرك الآن وما هي المدة المتاحة لك للمذاكر وأيضًا هل أنت بحاجة إلى وظيفة أو تدرس البرمجة بشكل جانبي أي يوجد مصدر دخل لك ولست بحاجة إلى المال. وإذا كان الوقت ضيق لديك وتريد العمل فأنصحك بدورة تطوير واجهات المستخدم أو تعلم أساسيات HTML, CSS وجافاسكريبت ثم عليك بتعلم لغة PHP ولارافيل من خلال دورة دورة تطوير تطبيقات الويب باستخدام لغة PHP.
- 2 اجابة
-
- 1
-
-
أنت في سن صغير وهذا رائع جدًا، عليك بدراسة الأساسيات وبعدها ستتمكن من رؤية الأمور بشكل أوضح، وإإذا قمت بالبحث على اليوتيوب عن أساسيات علوم الحاسب ستجد الكثير من المحتوى الجيد، ويوجد دورة خاصة بأساسيات علوم الحاسب في أكاديمية حسوب. حيث ستتعلم فيها ما يلي أو يجب عليك الإطلاع على ما يلي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب وبعد الإطلاع ما سبق من أي مصدر تريده، ستجد نفسك قادر على تحديد المجال الذي تريده، ولا تشغل بالك إطلاقًا بأفضل مجال، فأنت في سن صغير يسمح لك بتجربة كافة المجالات. وإذا أردتي ترشيح، فسأرشح لك مجال الويب لكونه يفتح لك المجال لباقي المجالات الأخرى ولا يضيق عليك وبتعلمه ستحقق استفادة في باقي المجالات الأخرى. وبالطبع أنت بحاجة إلى تعلم HTML, CSS, JS ثم تعلم إطار عمل مثل Vue.js أو React.js ثم تعلم الواجهة الخلفية من خلال PHP ولارافيل. وما أنصحك به هو بعد تعلم السابق، حاول التركيز على الواجهة الخلفية Back-End لتصبح مجالك أو حاول الإنتقال لتصبح مطور تطبيقات باستخدام React-Native أو Flutter. وذلك لأن في وجهة نظري مجال الواجهة الأمامية ليس جيد في المستقبل بالنسبة لسنك وأيضًا المجال متشبع بشكل كبير على عكس الواجهة الخلفية أو تطوير تطبيقات الهاتف. وحاول استغلال صغر سنك في تعلم الأساسيات بشكل جيد، فبعد تعلم أساسيات علوم الحاسب، أنصحك بتعلم C++ ثم الإنتقال لتعلم HTML, CSS و جافاسكريبت. ولا مشكلة أبدًا إذا واجهت صعوبة في البداية فذلك أمر طبيعي جدًا، وكلما ضربت بالمطرقة بشكل يومي أو متكرر أسبوعيًا ستجد الأمر أصبح أسهل. وأيضًا لا مشكلة إذا وجدت صعوبة في فهم الأساسيات، فعند تعلم لغة البرمجة الأولى لك ستتضح لك الكثير من الأمور ومن المفاهيم. فالتطبيق بشكل عملي من خلال الكود يوضح لك تلك المفاهيم النظرية أو المصطلحات.
-
مشكلتك تتمثل في الطريقة التي تتعامل بها مع حالة focus في حقل الإدخال، فحاليًا، تستخدم focus كمؤشر لمعرفة ما إذا كان حقل الإدخال يتم التركيز عليه أم لا. وبالتالي، عندما يتم فقدان التركيز، يتم تحديث الحالة focus بالقيمة false، مما يؤدي إلى إعادة label إلى الأسفل بغض النظر عن ما إذا كانت القيمة غير فارغة أم لا. بدلاً من ذلك، يمكنك استخدام حالة منفصلة لمعرفة ما إذا كان حقل الإدخال غير فارغٍ. يمكنك تحديث هذه الحالة في حدث onChange لحقل الإدخال وفي حالة كانت القيمة فارغة، فإنه يمكنك تحديث حالة focus إلى القيمة false في حدث onBlur. وإذا كانت القيمة غير فارغة، فيمكنك ترك حالة focus دون تغيير، مما يسمح بالاحتفاظ بالتسمية في الأعلى. يمكن تحديث الكود كما يلي: const [hasValue, setHasValue] = useState(false); const [focus, setFocus] = useState(false); const [idx, setIdx] = useState(null); const handleChange = (e) => { const { value } = e.target; setHasValue(value.length > 0); // ... أي تحديثات أخرى تريد إجراؤها عند تغيير القيمة }; const handleFocus = (id) => { setFocus(true); setIdx(id); }; const handleBlur = () => { if (!hasValue) { setFocus(false); } }; <FormInput key={wrap.id} {...wrap} value={values[wrap.name]} handleChange={handleChange} handleFocus={() => handleFocus(wrap.id)} focus={focus} idx={idx} handleBlur={handleBlur} /> المثال يتجاهل القيم الخاصة بـ values.email المذكورة في السؤال، ويستخدم بدلاً من ذلك القيمة الموجودة في e.target.value.
- 2 اجابة
-
- 1
-
-
بالنسبة للسؤال الأول فإن استخدام مكتبة jQuery يمكن أن يكون مفيداً في بعض الحالات، وذلك إذا كنت تحتاج إلى تفاعلات بسيطة متكررة على صفحات الويب، والتي يمكن أن تكون أكثر كفاءة باستخدام jQuery بدلاً من الكتابة بلغة JavaScript الخام. ومع ذلك، إذا كنت تستخدم قوالب جاهزة، فقد يكون التعامل مع التفاعلات البسيطة بالفعل قد تم تجهيزها بشكل جيد داخل القالب وبدون الحاجة إلى jQuery. في السابق، كان استخدام jQuery شائعًا جدًا في تطوير الويب، حيث كانت تساعد على تبسيط كتابة الشفرة وجعل التعامل مع DOM و Ajax والتحكم في التفاعلات بين الصفحة والمستخدم أسهل وأكثر فعالية. ومع ظهور تقنيات جديدة مثل React وVue.js و Angular وغيرها، وأدوات الجافاسكريبت المتطورة مثل Webpack وParcel وغيرها، أصبح استخدام jQuery في تطوير الويب أقل شيوعًا في الآونة الأخيرة. ولكن في الوقت الحالي، لا يزال هناك العديد من المواقف التي يمكن فيها استخدام jQuery بشكل مفيد وفعال، مثل تحديثات صغيرة وتفاعلات بسيطة في صفحات الويب. أما بشأن البدائل لـ jQuery، فهناك العديد من المكتبات والإطارات التي تهدف إلى تسهيل عمليات تطوير الويب، وتتضمن بعضها: React: مكتبة JavaScript لبناء واجهات المستخدم الديناميكية. Vue.js: إطار عمل جافاسكريبت لبناء واجهات المستخدم. Angular: إطار عمل جافاسكريبت شامل لبناء تطبيقات الويب. بالنسبة للسؤال الثاني فإن تضمين المكتبة بشكل داخلي يعني وضع الملف المرتبط بـ jQuery داخل مجلد المشروع واستدعائه من خلال صفحات الويب التي تحتاج إليه. بينما تضمين المكتبة باستخدام الرابط من مصدر خارجي، يعني استخدام CDN (شبكة توزيع المحتوى)، حيث يتم تحميل المكتبة من الخادم الخاص بالCDN بدلاً من تحميلها من خادم الموقع. وعادةً ما تكون طريقة الـ CDN هي الخيار الأفضل، لأنها توفر تحميلًا أسرع وأكثر استقراراً، ويتم تخزينها في ذاكرة التخزين المؤقت (cache) للمتصفحات، وبالتالي يتم تحميل المكتبة من الذاكرة المؤقتة بدلاً من تحميلها من الخادم كل مرة. كما أن استخدام CDN يخفض حجم الصفحة ويحسن سرعة التحميل، مما يساعد على تحسين تجربة المستخدم.
- 4 اجابة
-
- 1
-